Explorar el Código

Merge remote-tracking branch 'origin/main'

Sakana hace 4 días
padre
commit
10160ab80c
Se han modificado 22 ficheros con 462 adiciones y 20 borrados
  1. 37 0
      edu-travel-remote/edu-travel-remote-country/src/main/java/edu/travel/vo/BaseCountryNameAndCodeVo.java
  2. 46 0
      edu-travel-remote/edu-travel-remote-tenant/src/main/java/edu/travel/remote/feign/mode/dto/tenant/SysProjectDto.java
  3. 34 0
      edu-travel-remote/edu-travel-remote-tenant/src/main/java/edu/travel/remote/feign/mode/vo/tenant/SysProjectVo.java
  4. 21 0
      edu-travel-remote/edu-travel-remote-tenant/src/main/java/edu/travel/tenant/SysProjectRemoteController.java
  5. 18 0
      edu-travel-service/edu-travel-service-country/src/main/java/edu/travel/country/web/BaseCountryController.java
  6. 5 0
      edu-travel-service/edu-travel-service-education/src/main/java/edu/travel/education/dto/AddHappyEntryDto.java
  7. 5 0
      edu-travel-service/edu-travel-service-education/src/main/java/edu/travel/education/dto/HappyEntryDto.java
  8. 14 3
      edu-travel-service/edu-travel-service-education/src/main/java/edu/travel/education/entity/HappyEntry.java
  9. 4 3
      edu-travel-service/edu-travel-service-education/src/main/java/edu/travel/education/entity/dict/CourseTypeDict.java
  10. 1 0
      edu-travel-service/edu-travel-service-education/src/main/java/edu/travel/education/service/impl/HappyEntryServiceImpl.java
  11. 15 0
      edu-travel-service/edu-travel-service-education/src/main/java/edu/travel/education/vo/HappyEntryVo.java
  12. 4 4
      edu-travel-service/edu-travel-service-education/src/main/java/edu/travel/education/web/HappyEntryController.java
  13. 14 3
      edu-travel-service/edu-travel-service-education/src/main/resources/mapper/HappyEntryMapper.xml
  14. 5 1
      edu-travel-service/edu-travel-service-tenement/pom.xml
  15. 10 5
      edu-travel-service/edu-travel-service-tenement/src/main/java/edu/travel/tenant/constant/BaseConstant.java
  16. 45 0
      edu-travel-service/edu-travel-service-tenement/src/main/java/edu/travel/tenant/entity/SysProject.java
  17. 7 0
      edu-travel-service/edu-travel-service-tenement/src/main/java/edu/travel/tenant/mapper/SysProjectMapper.java
  18. 14 0
      edu-travel-service/edu-travel-service-tenement/src/main/java/edu/travel/tenant/service/SysProjectService.java
  19. 35 0
      edu-travel-service/edu-travel-service-tenement/src/main/java/edu/travel/tenant/service/impl/SysProjectServiceImpl.java
  20. 58 0
      edu-travel-service/edu-travel-service-tenement/src/main/java/edu/travel/tenant/web/SysProjectController.java
  21. 47 1
      edu-travel-service/edu-travel-service-tenement/src/main/java/edu/travel/tenant/web/TenantController.java
  22. 23 0
      edu-travel-service/edu-travel-service-tenement/src/main/resources/mapper/SysProjectMapper.xml

+ 37 - 0
edu-travel-remote/edu-travel-remote-country/src/main/java/edu/travel/vo/BaseCountryNameAndCodeVo.java

@@ -0,0 +1,37 @@
+package edu.travel.vo;
+
+import lombok.Data;
+
+/**
+ * BaseCountryNameAndCodeVo 类。
+ * <p>
+ * 描述:
+ *
+ * @author huangwenwen
+ * @date 2025/3/10
+ */
+
+@Data
+public class BaseCountryNameAndCodeVo {
+
+    /**
+     * 国家/洲中文名称
+     */
+    private String countryNameZh;
+
+    /**
+     * 国家/洲英文名称
+     */
+    private String countryNameEn;
+
+    /**
+     * 国家区号
+     */
+    private String areaCode;
+
+    /**
+     * 国家id
+     */
+    private String id;
+
+}

+ 46 - 0
edu-travel-remote/edu-travel-remote-tenant/src/main/java/edu/travel/remote/feign/mode/dto/tenant/SysProjectDto.java

@@ -0,0 +1,46 @@
+package edu.travel.remote.feign.mode.dto.tenant;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import edu.travel.entity.BaseEntity;
+import edu.travel.po.PagePO;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.NonNull;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class SysProjectDto extends PagePO {
+    /**
+     * 项目id
+     */
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
+    private Long id;
+
+    /**
+     * 项目名
+     */
+    @NonNull
+    @TableField(value = "project_name")
+    private String projectName;
+
+    /**
+     * 公钥
+     */
+    @TableField(value = "public_key")
+    private String publicKey;
+
+    /**
+     * 密钥
+     */
+    @TableField(value = "private_key")
+    private String privateKey;
+
+}

+ 34 - 0
edu-travel-remote/edu-travel-remote-tenant/src/main/java/edu/travel/remote/feign/mode/vo/tenant/SysProjectVo.java

@@ -0,0 +1,34 @@
+package edu.travel.remote.feign.mode.vo.tenant;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import edu.travel.entity.BaseEntity;
+import edu.travel.po.PagePO;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+public class SysProjectVo extends BaseEntity {
+    /**
+     * 项目id
+     */
+    private Long id;
+
+    /**
+     * 项目名
+     */
+    private String projectName;
+
+    /**
+     * 公钥
+     */
+    private String publicKey;
+
+    /**
+     * 密钥
+     */
+    private String privateKey;
+
+}

+ 21 - 0
edu-travel-remote/edu-travel-remote-tenant/src/main/java/edu/travel/tenant/SysProjectRemoteController.java

@@ -0,0 +1,21 @@
+package edu.travel.tenant;
+
+//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import edu.travel.remote.feign.mode.dto.tenant.SysProjectDto;
+import edu.travel.remote.feign.mode.vo.tenant.SysProjectVo;
+import edu.travel.rpc.RPCBaseResponse;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+@FeignClient(name = "tenant-dev",path = "/sysProject")
+public interface SysProjectRemoteController {
+
+    /**
+     * 新增项目标识
+     */
+    @PostMapping("/saveFormTarget")
+    public RPCBaseResponse<SysProjectVo> saveProject(@RequestBody SysProjectDto sysProjectDto) ;
+
+}

+ 18 - 0
edu-travel-service/edu-travel-service-country/src/main/java/edu/travel/country/web/BaseCountryController.java

@@ -1,15 +1,19 @@
 package edu.travel.country.web;
 
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import edu.travel.country.entity.BaseCountry;
 import edu.travel.country.service.BaseCountryService;
 import edu.travel.dto.BaseCountryDto;
 import edu.travel.remote.BaseCountryRemoteController;
 import edu.travel.rpc.RPCBaseResponse;
+import edu.travel.vo.BaseCountryNameAndCodeVo;
 import edu.travel.vo.BaseCountryVo;
 import edu.travel.web.BaseController;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
@@ -111,4 +115,18 @@ public class BaseCountryController extends BaseController<BaseCountry> implement
         BeanUtils.copyProperties(listRPCBaseResponse, baseCountryVoRPCBaseResponse);
         return baseCountryVoRPCBaseResponse;
     }
+
+    /**
+     * 获取国家名称和区号
+     */
+    @GetMapping("/getCountryCode")
+    @PreAuthorize("permitAll()")
+    public RPCBaseResponse<List<BaseCountryNameAndCodeVo>> getCountryNameAndAreaCode() {
+        List<BaseCountry> list = baseCountryService.list(new LambdaQueryWrapper<BaseCountry>()
+                .select(BaseCountry::getId,BaseCountry::getCountryNameZh, BaseCountry::getAreaCode, BaseCountry::getCountryNameEn)
+                .eq(BaseCountry::getDeleteFlag, 0)
+                .ne(BaseCountry::getParentId, 0));
+        List<BaseCountryNameAndCodeVo> baseCountryVos = BeanUtil.copyToList(list, BaseCountryNameAndCodeVo.class);
+        return new RPCBaseResponse<>(200, "sucess", baseCountryVos);
+    }
 }

+ 5 - 0
edu-travel-service/edu-travel-service-education/src/main/java/edu/travel/education/dto/AddHappyEntryDto.java

@@ -67,4 +67,9 @@ public class AddHappyEntryDto{
      * 项目code
      */
     private String project;
+
+    /**
+     * 所属国家id
+     */
+    private Long countryId;
 }

+ 5 - 0
edu-travel-service/edu-travel-service-education/src/main/java/edu/travel/education/dto/HappyEntryDto.java

@@ -24,6 +24,11 @@ public class HappyEntryDto extends PagePO {
     private Long id;
 
     /**
+     * 所属国家id
+     */
+    private Long countryId;
+
+    /**
     * 姓
     */
     private String surname;

+ 14 - 3
edu-travel-service/edu-travel-service-education/src/main/java/edu/travel/education/entity/HappyEntry.java

@@ -1,18 +1,18 @@
 package edu.travel.education.entity;
 
-import java.util.Date;
 import java.util.Map;
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import edu.travel.annotation.LinkConst;
+import edu.travel.annotation.LinkOne;
+//import edu.travel.country.mapper.BaseCountryMapper;
 import edu.travel.education.entity.dict.CourseTypeDict;
 import edu.travel.entity.BaseEntity;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
-import lombok.NonNull;
 
 import javax.validation.constraints.NotNull;
 
@@ -38,6 +38,12 @@ public class HappyEntry extends BaseEntity {
     private String surname;
 
     /**
+     * 国家
+     */
+    @NotNull
+    @TableField(value = "country_id")
+    private Long countryId;
+    /**
     * 名
     */
     @NotNull
@@ -93,5 +99,10 @@ public class HappyEntry extends BaseEntity {
     @LinkConst(fieldName = "courseType",clazz = CourseTypeDict.class)
     private Map CodeCourseTypeDict;
 
-
+    /**
+     * 所属国家
+     */
+    @TableField(exist = false)
+//    @LinkOne(linkField="countryId",linkMapper= BaseCountryMapper.class,linkPrimaryField="id")
+    private Map CodeCountryNameDict;
 }

+ 4 - 3
edu-travel-service/edu-travel-service-education/src/main/java/edu/travel/education/entity/dict/CourseTypeDict.java

@@ -8,9 +8,10 @@ public class CourseTypeDict {
     private final  Map<Integer,String> courseTypeMap = new HashMap<Integer,String>();
 
     public CourseTypeDict(){
-        courseTypeMap.put(1,"初级");
-        courseTypeMap.put(2,"中级");
-        courseTypeMap.put(3,"高级");
+        courseTypeMap.put(1,"启程");
+        courseTypeMap.put(2,"成长");
+        courseTypeMap.put(3,"突破");
+        courseTypeMap.put(4,"进阶");
     }
     public String getValue(Integer key){
         return courseTypeMap.containsKey(key) ?  courseTypeMap.get(key) : null;

+ 1 - 0
edu-travel-service/edu-travel-service-education/src/main/java/edu/travel/education/service/impl/HappyEntryServiceImpl.java

@@ -43,6 +43,7 @@ public class HappyEntryServiceImpl  extends SysServiceImpl<HappyEntryMapper, Hap
 
 
         Assert.isTrue(ObjectUtil.isNotEmpty(happyEntryDto),"参数不能为空");
+        Assert.isFalse(happyEntryDto.getMaxAge()< happyEntryDto.getMinAge(),"最大年龄必须大于等于最小年龄");
         HappyEntry entity = BeanUtil.copyProperties(happyEntryDto, HappyEntry.class);
         boolean save = this.save(entity);
         Assert.isTrue(save,"保存失败");

+ 15 - 0
edu-travel-service/edu-travel-service-education/src/main/java/edu/travel/education/vo/HappyEntryVo.java

@@ -2,6 +2,8 @@ package edu.travel.education.vo;
 
 import com.baomidou.mybatisplus.annotation.TableField;
 import edu.travel.annotation.LinkConst;
+import edu.travel.annotation.LinkOne;
+//import edu.travel.country.mapper.BaseCountryMapper;
 import edu.travel.education.entity.dict.CourseTypeDict;
 import edu.travel.po.PagePO;
 import lombok.AllArgsConstructor;
@@ -44,6 +46,11 @@ public class HappyEntryVo extends PagePO {
     private String areaCode;
 
     /**
+     * 所属国家
+     */
+    private String countryId;
+
+    /**
     * 课程类型
     */
     private Integer courseType;
@@ -68,4 +75,12 @@ public class HappyEntryVo extends PagePO {
     @TableField(exist = false)
     @LinkConst(fieldName = "courseType",clazz = CourseTypeDict.class)
     private Map CodeCourseTypeDict;
+
+    /**
+     * 所属国家
+     */
+    @TableField(exist = false)
+//    @LinkOne(linkField="countryId",linkMapper= BaseCountryMapper.class,linkPrimaryField="id")
+    private Map CodeCountryNameDict;
+
 }

+ 4 - 4
edu-travel-service/edu-travel-service-education/src/main/java/edu/travel/education/web/HappyEntryController.java

@@ -1,5 +1,6 @@
 package edu.travel.education.web;
 import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import edu.travel.education.dto.AddHappyEntryDto;
@@ -7,10 +8,7 @@ import edu.travel.education.dto.HappyEntryDto;
 import edu.travel.education.entity.HappyEntry;
 import edu.travel.education.service.impl.HappyEntryServiceImpl;
 import edu.travel.education.vo.HappyEntryVo;
-import edu.travel.resp.BaseResponse;
-import edu.travel.resp.PageResponse;
 import edu.travel.rpc.RPCBaseResponse;
-import edu.travel.rpc.RPCPageResponse;
 import edu.travel.web.BaseController;
 import org.springframework.beans.BeanUtils;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -42,7 +40,9 @@ public class HappyEntryController extends BaseController<HappyEntry> {
     @PreAuthorize("permitAll()")
     public RPCBaseResponse<HappyEntryVo> addHappyEntry(@RequestBody AddHappyEntryDto happyEntryDto){
         HappyEntryVo vo = happyEntryService.addHappyEntry(happyEntryDto);
-        return new RPCBaseResponse<>(200,"success",vo);
+        HappyEntry oneLink = happyEntryService.getOneLink(new LambdaQueryWrapper<HappyEntry>().eq(HappyEntry::getId, vo.getId()));
+        HappyEntryVo happyEntryVo = BeanUtil.copyProperties(oneLink, HappyEntryVo.class);
+        return new RPCBaseResponse<>(200,"success",happyEntryVo);
     }
 
     /**

+ 14 - 3
edu-travel-service/edu-travel-service-education/src/main/resources/mapper/HappyEntryMapper.xml

@@ -9,6 +9,7 @@
     <result column="name" jdbcType="VARCHAR" property="name" />
     <result column="phone" jdbcType="VARCHAR" property="phone" />
     <result column="area_code" jdbcType="VARCHAR" property="areaCode" />
+    <result column="country_id" jdbcType="BIGINT" property="countryId" />
     <result column="course_type" jdbcType="INTEGER" property="courseType" />
     <result column="min_age" jdbcType="INTEGER" property="minAge" />
     <result column="max_age" jdbcType="INTEGER" property="maxAge" />
@@ -22,7 +23,7 @@
   </resultMap>
   <sql id="Base_Column_List">
     <!--@mbg.generated-->
-    id, surname, `name`, phone, area_code, course_type, min_age,max_age, email, project, create_time,
+    id, surname, `name`, phone, area_code, country_id,course_type, min_age,max_age, email, project, create_time,
     create_user_id, update_time, update_user_id, delete_flag
   </sql>
   <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
@@ -40,11 +41,11 @@
   <insert id="insert" parameterType="edu.travel.education.entity.HappyEntry">
     <!--@mbg.generated-->
     insert into happy_entry (id, surname, `name`, 
-      phone, area_code, course_type, 
+      phone, area_code, course_type, country_id,
       min_age,max_age, email, project,
       create_time, create_user_id, update_time, 
       update_user_id, delete_flag)
-    values (#{id,jdbcType=BIGINT}, #{surname,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, 
+    values (#{id,jdbcType=BIGINT}, #{surname,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR},  #{countryId,jdbcType=BIGINT},
       #{phone,jdbcType=VARCHAR}, #{areaCode,jdbcType=VARCHAR}, #{courseType,jdbcType=INTEGER}, 
       #{minAge,jdbcType=INTEGER},#{maxAge,jdbcType=INTEGER}, #{email,jdbcType=VARCHAR}, #{project,jdbcType=VARCHAR},
       #{createTime,jdbcType=TIMESTAMP}, #{createUserId,jdbcType=BIGINT}, #{updateTime,jdbcType=TIMESTAMP}, 
@@ -81,6 +82,9 @@
       <if test="email != null">
         email,
       </if>
+      <if test="countryId != null">
+        country_id,
+      </if>
       <if test="project != null">
         project,
       </if>
@@ -104,6 +108,9 @@
       <if test="id != null">
         #{id,jdbcType=BIGINT},
       </if>
+      <if test="countryId != null">
+        #{country_id,jdbcType=BIGINT},
+      </if>
       <if test="surname != null">
         #{surname,jdbcType=VARCHAR},
       </if>
@@ -155,6 +162,9 @@
       <if test="surname != null">
         surname = #{surname,jdbcType=VARCHAR},
       </if>
+      <if test="countryId != null">
+        country_id = #{countryId,jdbcType=VARCHAR},
+      </if>
       <if test="name != null">
         `name` = #{name,jdbcType=VARCHAR},
       </if>
@@ -202,6 +212,7 @@
     update happy_entry
     set surname = #{surname,jdbcType=VARCHAR},
       `name` = #{name,jdbcType=VARCHAR},
+      `country_id` = #{countryId,jdbcType=BIGINT},
       phone = #{phone,jdbcType=VARCHAR},
       area_code = #{areaCode,jdbcType=VARCHAR},
       course_type = #{courseType,jdbcType=INTEGER},

+ 5 - 1
edu-travel-service/edu-travel-service-tenement/pom.xml

@@ -145,7 +145,11 @@
             <version>1.0-SNAPSHOT</version>
             <scope>compile</scope>
         </dependency>
-
+        <dependency>
+            <groupId>edu.travel</groupId>
+            <artifactId>edu-travel-adapter-upload</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
     </dependencies>
     <profiles>
         <profile>

+ 10 - 5
edu-travel-service/edu-travel-service-tenement/src/main/java/edu/travel/tenant/constant/BaseConstant.java

@@ -27,17 +27,22 @@ public class BaseConstant {
     /**
      * 商品文件上传图片类型
      */
-    private static final Set<String> PRODUCT_IMAGE_TYPES = new HashSet<>(
+    private static final Set<String> USER_HEAD_TYPE = new HashSet<>(
             Arrays.asList("jpg", "jpeg", "png")
     );
-
-    public static Set<String> getProductImageTypes() {
-        return PRODUCT_IMAGE_TYPES;
+    /**
+     * 商品文件上传图片类型
+     */
+    private static final Set<String> BANNER_TYPES_TYPE = new HashSet<>(
+            Arrays.asList("jpg", "jpeg", "png","mp4")
+    );
+    public static Set<String> getUserHeadType() {
+        return USER_HEAD_TYPE;
     }
     /**
      * 获取banner 图片类型
      */
     public static Set<String> getBannerImageTypes() {
-        return PRODUCT_IMAGE_TYPES;
+        return BANNER_TYPES_TYPE;
     }
 }

+ 45 - 0
edu-travel-service/edu-travel-service-tenement/src/main/java/edu/travel/tenant/entity/SysProject.java

@@ -0,0 +1,45 @@
+package edu.travel.tenant.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import edu.travel.entity.BaseEntity;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName(value = "sys_project")
+public class SysProject  extends BaseEntity implements Serializable {
+    /**
+     * 项目id
+     */
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
+    private Long id;
+
+    /**
+     * 项目名
+     */
+    @TableField(value = "project_name")
+    private String projectName;
+
+    /**
+     * 公钥
+     */
+    @TableField(value = "public_key")
+    private String publicKey;
+
+    /**
+     * 密钥
+     */
+    @TableField(value = "private_key")
+    private String privateKey;
+
+}

+ 7 - 0
edu-travel-service/edu-travel-service-tenement/src/main/java/edu/travel/tenant/mapper/SysProjectMapper.java

@@ -0,0 +1,7 @@
+package edu.travel.tenant.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import edu.travel.tenant.entity.SysProject;
+
+public interface SysProjectMapper extends BaseMapper<SysProject> {
+}

+ 14 - 0
edu-travel-service/edu-travel-service-tenement/src/main/java/edu/travel/tenant/service/SysProjectService.java

@@ -0,0 +1,14 @@
+package edu.travel.tenant.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import edu.travel.remote.feign.mode.dto.tenant.SysProjectDto;
+import edu.travel.remote.feign.mode.vo.tenant.SysProjectVo;
+import edu.travel.tenant.entity.SysProject;
+import com.baomidou.mybatisplus.extension.service.IService;
+public interface SysProjectService extends IService<SysProject>{
+
+
+    SysProjectVo saveProject(SysProjectDto sysProjectDto);
+
+    IPage<SysProject> getProjectPageList(SysProjectDto sysProjectDto);
+}

+ 35 - 0
edu-travel-service/edu-travel-service-tenement/src/main/java/edu/travel/tenant/service/impl/SysProjectServiceImpl.java

@@ -0,0 +1,35 @@
+package edu.travel.tenant.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import edu.travel.remote.feign.mode.dto.tenant.SysProjectDto;
+import edu.travel.remote.feign.mode.vo.tenant.SysProjectVo;
+import org.modelmapper.internal.util.Assert;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import edu.travel.tenant.entity.SysProject;
+import edu.travel.tenant.mapper.SysProjectMapper;
+import edu.travel.tenant.service.SysProjectService;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+public class SysProjectServiceImpl extends ServiceImpl<SysProjectMapper, SysProject> implements SysProjectService{
+
+    @Override
+    @Transactional
+    public SysProjectVo saveProject(SysProjectDto sysProjectDto) {
+        Assert.isTrue(ObjectUtil.isNotEmpty(sysProjectDto.getProjectName()),"项目名不能为空");
+        SysProject sysProject = BeanUtil.copyProperties(sysProjectDto, SysProject.class);
+        this.save(sysProject);
+        return BeanUtil.copyProperties(sysProject, SysProjectVo.class);
+    }
+
+    @Override
+    public IPage<SysProject> getProjectPageList(SysProjectDto sysProjectDto) {
+        IPage<SysProject> sysProjectPage = new Page<>(sysProjectDto.getCurrentPage()==null?1:sysProjectDto.getCurrentPage(),sysProjectDto.getPageSize()==null?10:sysProjectDto.getPageSize());
+        IPage<SysProject> sysProjectIPage = this.baseMapper.selectPage(sysProjectPage, null);
+        return sysProjectIPage;
+    }
+}

+ 58 - 0
edu-travel-service/edu-travel-service-tenement/src/main/java/edu/travel/tenant/web/SysProjectController.java

@@ -0,0 +1,58 @@
+package edu.travel.tenant.web;
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import edu.travel.remote.feign.mode.dto.tenant.SysProjectDto;
+import edu.travel.remote.feign.mode.vo.tenant.SysProjectVo;
+import edu.travel.rpc.RPCBaseResponse;
+import edu.travel.rpc.RPCPageResponse;
+import edu.travel.tenant.SysProjectRemoteController;
+import edu.travel.tenant.SysRoleRemoteController;
+import edu.travel.tenant.entity.SysProject;
+import edu.travel.tenant.entity.SysRole;
+import edu.travel.tenant.service.impl.SysProjectServiceImpl;
+import edu.travel.web.BaseController;
+import org.springframework.beans.BeanUtils;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.List;
+
+/**
+* (sys_project)表控制层
+*
+* @author xxxxx
+*/
+@RestController
+@RequestMapping("/sysProject")
+public class SysProjectController extends BaseController<SysProject> implements SysProjectRemoteController {
+    /**
+    * 项目标识表
+    */
+    @Autowired
+    private SysProjectServiceImpl sysProjectServiceImpl;
+
+    /**
+     * 新增项目标识
+     */
+    @PostMapping("/saveFormTarget")
+//    @PreAuthorize("hasRole('超级管理员')")
+    public RPCBaseResponse<SysProjectVo> saveProject(@RequestBody SysProjectDto sysProjectDto) {
+      SysProjectVo sysProjectVo = sysProjectServiceImpl.saveProject(sysProjectDto);
+      return RPCBaseResponse.success("保存成功",sysProjectVo);
+    }
+
+    @GetMapping("/getProjectPageList")
+//    @PreAuthorize("hasRole('超级管理员')")
+    public RPCBaseResponse<Page<SysProjectVo>> getProjectPageList(SysProjectDto sysProjectDto) {
+    IPage<SysProject> page = sysProjectServiceImpl.getProjectPageList(sysProjectDto);
+        List<SysProjectVo> happyEntryVos = BeanUtil.copyToList(page.getRecords(), SysProjectVo.class);
+        Page<SysProjectVo> target = new Page<SysProjectVo>();
+        BeanUtils.copyProperties(page, target);
+        target.setRecords(happyEntryVos);
+        return new RPCBaseResponse<>(200,"success",target);
+    }
+
+}

+ 47 - 1
edu-travel-service/edu-travel-service-tenement/src/main/java/edu/travel/tenant/web/TenantController.java

@@ -1,11 +1,15 @@
 package edu.travel.tenant.web;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.io.FileTypeUtil;
 import cn.hutool.core.lang.Assert;
+import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import edu.travel.adapter.service.upload.UploadAdapter;
 import edu.travel.remote.feign.mode.dto.tenant.AddOrUpdateTenantDto;
 import edu.travel.remote.feign.mode.dto.tenant.AssignRolesOrMenusDto;
 import edu.travel.remote.feign.mode.dto.tenant.EduTenantPageDto;
@@ -13,25 +17,29 @@ import edu.travel.remote.feign.mode.vo.tenant.AdminInfoRoleMenuVo;
 import edu.travel.remote.feign.mode.vo.tenant.EduTenantVo;
 import edu.travel.remote.feign.mode.vo.tenant.MenuTreeVo;
 import edu.travel.remote.feign.mode.vo.tenant.SysRoleVo;
+import edu.travel.remote.upload.dto.EduFileDTO;
 import edu.travel.resp.BaseResponse;
 import edu.travel.resp.PageResponse;
 import edu.travel.rpc.RPCBaseResponse;
 import edu.travel.tenant.TenantRemoteController;
+import edu.travel.tenant.constant.BaseConstant;
 import edu.travel.tenant.entity.EduTenant;
 import edu.travel.tenant.entity.SysRole;
 import edu.travel.tenant.entity.SysUserRole;
 import edu.travel.tenant.service.ISysUserRoleService;
 import edu.travel.tenant.service.ITenantService;
+import edu.travel.tenant.utils.FIleUtil;
 import edu.travel.web.BaseController;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.util.*;
 import java.util.stream.Collectors;
 
+import static edu.travel.rpc.RPCBaseResponse.error;
 import static edu.travel.rpc.RPCBaseResponse.success;
 
 @RestController
@@ -41,6 +49,8 @@ public class TenantController  extends BaseController<EduTenant> implements Tena
     private ITenantService tenantService;
     @Autowired
     private ISysUserRoleService sysUserRoleService;
+    @Autowired
+    private UploadAdapter uploadAdapter;
 
     @GetMapping("/getTenantByPhoneNumber")
 //    @PreAuthorize("hasRole('超级管理员')")
@@ -370,5 +380,41 @@ public class TenantController  extends BaseController<EduTenant> implements Tena
         BeanUtils.copyProperties(countryRPCBaseResponse, baseCountryVoRPCBaseResponse);
         return baseCountryVoRPCBaseResponse;
     }
+    /**
+     * 头像上传
+     */
+    @PostMapping("/uploadHeadImage")
+    public RPCBaseResponse<String> uploadHeadImage(MultipartFile file) {
+        if (file == null || file.isEmpty()) {
+            return error();
+        }
+        try {
+            // 通过文件的字节流获取真实类型(Hutool自动解析魔数)
+            String fileType = FileTypeUtil.getType(file.getInputStream());
+            // 判断类型是否在支持的图片类型集合中
+            if (fileType != null && BaseConstant.getUserHeadType().contains(fileType.toLowerCase())) {
+                String filename = file.getOriginalFilename();
+                if(ObjectUtil.isEmpty(filename)){
+                    return error();
+                }
+                RPCBaseResponse<String> stringRPCBaseResponse = uploadAdapter.initializeUpload();
+
+                EduFileDTO eduFileDTO = new EduFileDTO();
+                eduFileDTO.setUploadId(stringRPCBaseResponse.getData());
+                eduFileDTO.setFileType(fileType);
+                eduFileDTO.setFileName(filename);
+                eduFileDTO.setFileSysName(IdUtil.fastSimpleUUID()+ DateUtil.format(new Date(),"yyyyMMddHHmmss") +"."+fileType);
+                eduFileDTO.setFileMd5(FIleUtil.calculateFileMd5(file.getBytes()));
+                RPCBaseResponse rpcBaseResponse = uploadAdapter.uploadFile(eduFileDTO, file);
+                return success(rpcBaseResponse.getData().toString());
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            // 处理流读取异常或类型解析失败
+            return error("文件上传失败");
+        }
+        return error();
+    }
+
 }
 

+ 23 - 0
edu-travel-service/edu-travel-service-tenement/src/main/resources/mapper/SysProjectMapper.xml

@@ -0,0 +1,23 @@
+<?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="edu.travel.tenant.mapper.SysProjectMapper">
+  <resultMap id="BaseResultMap" type="edu.travel.tenant.entity.SysProject">
+    <!--@mbg.generated-->
+    <!--@Table sys_project-->
+    <id column="id" jdbcType="BIGINT" property="id" />
+    <result column="project_name" jdbcType="VARCHAR" property="projectName" />
+    <result column="public_key" jdbcType="VARCHAR" property="publicKey" />
+    <result column="private_key" jdbcType="VARCHAR" property="privateKey" />
+    <result column="project" jdbcType="VARCHAR" property="project" />
+    <result column="delete_flag" jdbcType="INTEGER" property="deleteFlag" />
+    <result column="create_user_id" jdbcType="BIGINT" property="createUserId" />
+    <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
+    <result column="update_user_id" jdbcType="BIGINT" property="updateUserId" />
+    <result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
+  </resultMap>
+  <sql id="Base_Column_List">
+    <!--@mbg.generated-->
+    id, project_name, public_key, private_key, project, delete_flag, create_user_id, 
+    create_time, update_user_id, update_time
+  </sql>
+</mapper>