提交 e02003d5 作者: zhenjie

需求发布相关

上级 757c7103
package com.mmc.csf.infomation.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @author: zj
* @Date: 2023/5/18 17:25
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class UserAccountSimpleDTO implements Serializable {
private static final long serialVersionUID = -4408363798593041955L;
@ApiModelProperty(value = "用户id")
private Integer id;
@ApiModelProperty(value = "用户类型")
private Integer accountType;
@ApiModelProperty(value = "用户uid")
private String uid;
@ApiModelProperty(value = "手机号")
private String phoneNum;
@ApiModelProperty(value = "用户名称")
private String userName;
@ApiModelProperty(value = "用户昵称")
private String nickName;
@ApiModelProperty(value = "用户头像")
private String userImg;
@ApiModelProperty(value = "用户性别:0未知、1男、2女")
private Integer userSex;
@ApiModelProperty(value = "用户邮箱")
private String email;
@ApiModelProperty(value = "用户来源,0自然流、1海报、2抖音、3公众号、4社群、5招投标、6官网")
private Integer source;
@ApiModelProperty(value = "用户可用状态:0禁用、1可用")
private Integer accountStatus;
@ApiModelProperty(value = "账号类型:0后台管理账号 ; 100云享飞-客户端;")
private Integer portType;
@ApiModelProperty(value = "企业认证状态, 0未通过,1通过")
private Integer companyAuthStatus;
}
package com.mmc.csf.infomation.vo;
import com.mmc.csf.release.model.group.Insert;
import com.mmc.csf.release.model.group.Update;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;
/**
* @author: zj
* @Date: 2023/5/18 15:14
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class RequirementsInfoVO implements Serializable {
private static final long serialVersionUID = -447951390213113317L;
@ApiModelProperty(value = "id")
@NotNull(message = "id不能为空", groups = {Update.class})
private Integer id;
@ApiModelProperty(value = "需求类型id")
@NotNull(message = "需求类型id不能为空", groups = {Insert.class})
private Integer requirementTypeId;
@ApiModelProperty(value = "用户id")
@NotNull(message = "用户id不能为空", groups = {Insert.class})
private Integer userAccountId;
@ApiModelProperty(value = "发布者姓名")
@NotNull(message = "发布者姓名不能为空", groups = {Insert.class})
private String publishName;
@ApiModelProperty(value = "发布者电话")
@NotNull(message = "发布者电话不能为空", groups = {Insert.class})
private String publishPhone;
@ApiModelProperty(value = "需求描述")
@NotNull(message = "需求描述不能为空", groups = {Insert.class})
private String requireDescription;
@ApiModelProperty(value = "是否已解决")
private Integer solved;
@ApiModelProperty(value = "创建时间")
private Date createTime;
@ApiModelProperty(value = "更新时间")
private Date updateTime;
}
package com.mmc.csf.infomation.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* @author: zj
* @Date: 2023/5/18 15:08
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class RequirementsTypeVO implements Serializable {
private static final long serialVersionUID = -3270297527662331445L;
@ApiModelProperty(value = "id")
private Integer id;
@ApiModelProperty(value = "需求名称")
private String typeName;
}
...@@ -297,6 +297,7 @@ public enum ResultEnum implements BaseErrorInfoInterface { ...@@ -297,6 +297,7 @@ public enum ResultEnum implements BaseErrorInfoInterface {
VERIFY_COUNT_ERROR("30416", "认证次数上限,请联系管理员"), VERIFY_COUNT_ERROR("30416", "认证次数上限,请联系管理员"),
NOT_ENT_VERIFY_ERROR("30417", "机构未认证或认证未通过,请先进行机构认证"), NOT_ENT_VERIFY_ERROR("30417", "机构未认证或认证未通过,请先进行机构认证"),
NOT__VERIFY_ERROR("30418", "机构未认证或飞手认证未通过,请先进行认证"), NOT__VERIFY_ERROR("30418", "机构未认证或飞手认证未通过,请先进行认证"),
COMPANY_NOT_VERIFY_ERROR("30419", "未进行企业认证"),
//渠道认证 //渠道认证
NOT_ENT_USER("30501", "感谢您有意向成为我们的渠道商,请先完成企业认证。"), NOT_ENT_USER("30501", "感谢您有意向成为我们的渠道商,请先完成企业认证。"),
......
...@@ -24,16 +24,16 @@ ...@@ -24,16 +24,16 @@
</dependency> </dependency>
<!-- Eureka 客户端, 客户端向 Eureka Server 注册的时候会提供一系列的元数据信息, 例如: 主机, 端口, 健康检查url等 <!-- Eureka 客户端, 客户端向 Eureka Server 注册的时候会提供一系列的元数据信息, 例如: 主机, 端口, 健康检查url等
Eureka Server 接受每个客户端发送的心跳信息, 如果在某个配置的超时时间内未接收到心跳信息, 实例会被从注册列表中移除 --> Eureka Server 接受每个客户端发送的心跳信息, 如果在某个配置的超时时间内未接收到心跳信息, 实例会被从注册列表中移除 -->
<dependency> <!-- <dependency>-->
<groupId>org.springframework.cloud</groupId> <!-- <groupId>org.springframework.cloud</groupId>-->
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> <!-- <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>-->
<exclusions> <!-- <exclusions>-->
<exclusion> <!-- <exclusion>-->
<groupId>com.google.guava</groupId> <!-- <groupId>com.google.guava</groupId>-->
<artifactId>guava</artifactId> <!-- <artifactId>guava</artifactId>-->
</exclusion> <!-- </exclusion>-->
</exclusions> <!-- </exclusions>-->
</dependency> <!-- </dependency>-->
<!-- 引入 Feign, 可以以声明的方式调用微服务 --> <!-- 引入 Feign, 可以以声明的方式调用微服务 -->
<dependency> <dependency>
<groupId>org.springframework.cloud</groupId> <groupId>org.springframework.cloud</groupId>
...@@ -94,11 +94,11 @@ ...@@ -94,11 +94,11 @@
<version>0.0.1-SNAPSHOT</version> <version>0.0.1-SNAPSHOT</version>
</dependency> </dependency>
<!-- RabbitMQ --> <!-- &lt;!&ndash; RabbitMQ &ndash;&gt;-->
<dependency> <!-- <dependency>-->
<groupId>org.springframework.boot</groupId> <!-- <groupId>org.springframework.boot</groupId>-->
<artifactId>spring-boot-starter-amqp</artifactId> <!-- <artifactId>spring-boot-starter-amqp</artifactId>-->
</dependency> <!-- </dependency>-->
<!-- easypoi导出 --> <!-- easypoi导出 -->
<dependency> <dependency>
......
...@@ -2,13 +2,14 @@ package com.mmc.csf.release; ...@@ -2,13 +2,14 @@ package com.mmc.csf.release;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
/** /**
* @Author LW * @Author LW
* @date 2023/5/13 10:39 * @date 2023/5/13 10:39
* 概要: * 概要:
// */ // */
//@EnableFeignClients(basePackages = "com.mmc.csf.starter.client") // 所有FeignClient放在client-feign-springboot-starter里面进行管理 @EnableFeignClients(basePackages = "com.mmc.csf.release.feign") // 所有FeignClient放在client-feign-springboot-starter里面进行管理
//@EnableCircuitBreaker //@EnableCircuitBreaker
//@EnableEurekaClient //@EnableEurekaClient
@SpringBootApplication @SpringBootApplication
......
package com.mmc.csf.release.controller;
import com.mmc.csf.common.util.web.ResultBody;
import com.mmc.csf.infomation.vo.RequirementsInfoVO;
import com.mmc.csf.infomation.vo.RequirementsTypeVO;
import com.mmc.csf.release.model.group.Insert;
import com.mmc.csf.release.model.group.Query;
import com.mmc.csf.release.service.RequirementsService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* @author: zj
* @Date: 2023/5/18 14:26
*/
@Api(tags = {"需求相关"})
@RestController
@RequestMapping("/requirements/")
public class RequirementsController {
@Autowired
private RequirementsService requirementsService;
@ApiOperation(value = "需求类型")
@ApiResponses({ @ApiResponse(code = 200, message = "OK", response = RequirementsTypeVO.class) })
@GetMapping("listType")
public ResultBody listType(){
return requirementsService.listType();
}
@ApiOperation(value = "需求发布")
@ApiResponses({ @ApiResponse(code = 200, message = "OK", response = ResultBody.class) })
@PostMapping("publish")
public ResultBody publish(@Validated(value = {Insert.class})@RequestBody RequirementsInfoVO requirementsInfoVO){
return requirementsService.publish(requirementsInfoVO);
}
@ApiOperation(value = "需求发布列表")
@ApiResponses({ @ApiResponse(code = 200, message = "OK", response = RequirementsInfoVO.class) })
@PostMapping("listPublishPage")
public ResultBody listPublishPage(){
return ResultBody.success();
}
@ApiOperation(value = "需求已解决")
@ApiResponses({ @ApiResponse(code = 200, message = "OK", response = ResultBody.class) })
@GetMapping("solveRequire")
public ResultBody solveRequire(@RequestParam Integer requirementsInfoId, @RequestParam Integer userAccountId){
return requirementsService.solveRequire(requirementsInfoId, userAccountId);
}
}
package com.mmc.csf.release.dao;
import com.mmc.csf.release.entity.RequirementsInfoDO;
import com.mmc.csf.release.entity.RequirementsTypeDO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* @author: zj
* @Date: 2023/5/18 14:27
*/
@Mapper
public interface RequirementsDao {
/**
* 需求类型列表
* @return
*/
List<RequirementsTypeDO> listType();
/**
* 添加需求
* @param requirementsInfoDO
*/
void addRequirementsInfo(RequirementsInfoDO requirementsInfoDO);
/**
* 获取需求
* @param requirementsInfoId
*/
RequirementsInfoDO getRequirementsInfoById(Integer requirementsInfoId);
/**
* 解决需求
* @param requirementsInfoId
*/
void solveRequire(Integer requirementsInfoId);
}
package com.mmc.csf.release.entity;
import com.mmc.csf.infomation.vo.RequirementsInfoVO;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* @author: zj
* @Date: 2023/5/18 15:11
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class RequirementsInfoDO implements Serializable {
private static final long serialVersionUID = -1811974173256250060L;
private Integer id;
private Integer requirementTypeId;
private Integer userAccountId;
private String publishName;
private String publishPhone;
private String requireDescription;
private Integer deleted;
private Integer solved;
private Date createTime;
private Date updateTime;
public RequirementsInfoVO buildRequirementsInfoVO(){
return RequirementsInfoVO.builder().id(this.id).requirementTypeId(this.requirementTypeId).userAccountId(this.userAccountId).publishName(this.publishName)
.publishPhone(this.publishPhone).requireDescription(this.requireDescription).solved(this.solved).createTime(this.createTime).updateTime(this.updateTime).build();
}
public RequirementsInfoDO(RequirementsInfoVO requirementsInfoVO){
this.id = requirementsInfoVO.getId();
this.requirementTypeId = requirementsInfoVO.getRequirementTypeId();
this.userAccountId = requirementsInfoVO.getUserAccountId();
this.publishName = requirementsInfoVO.getPublishName();
this.publishPhone = requirementsInfoVO.getPublishPhone();
this.requireDescription = requirementsInfoVO.getRequireDescription();
}
}
package com.mmc.csf.release.entity;
import com.mmc.csf.infomation.vo.RequirementsTypeVO;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
/**
* @author: zj
* @Date: 2023/5/18 15:02
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class RequirementsTypeDO implements Serializable {
private static final long serialVersionUID = -6253169850261271614L;
private Integer id;
private String typeName;
private Date createTime;
public RequirementsTypeVO buildRequirementsTypeVO(){
return RequirementsTypeVO.builder().id(this.id).typeName(this.typeName).build();
}
}
package com.mmc.csf.release.feign;
import com.mmc.csf.common.util.web.ResultBody;
import com.mmc.csf.infomation.dto.UserAccountSimpleDTO;
import com.mmc.csf.release.feign.hystrix.UserAppApiHystrix;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
/**
* @author: zj
* @Date: 2023/5/18 17:06
*/
@FeignClient(name = "userapp", fallback = UserAppApiHystrix.class)
public interface UserAppApi {
/**
* 根据用户id获取基本信息
* @param userAccountId
* @return
*/
@RequestMapping(value = "/userapp/user-account/feignGetUserSimpleInfo", method = RequestMethod.GET)
public UserAccountSimpleDTO feignGetUserSimpleInfo(@RequestParam Integer userAccountId);
}
package com.mmc.csf.release.feign.config;
import com.mmc.csf.release.feign.hystrix.UserAppApiHystrix;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
/**
* @author: zj
* @Date: 2023/5/18 18:21
*/
@ComponentScan(basePackages = "com.mmc.csf.release.feign")
@Configuration
public class FeignConfiguration {
@Bean(name = "userAppApiHystrix")
public UserAppApiHystrix userAppApi(){
return new UserAppApiHystrix();
}
}
package com.mmc.csf.release.feign.hystrix;
import com.mmc.csf.infomation.dto.UserAccountSimpleDTO;
import com.mmc.csf.release.feign.UserAppApi;
import lombok.extern.slf4j.Slf4j;
/**
* @author: zj
* @Date: 2023/5/18 17:08
*/
@Slf4j
public class UserAppApiHystrix implements UserAppApi {
@Override
public UserAccountSimpleDTO feignGetUserSimpleInfo(Integer userAccountId) {
log.error("熔断:feignGetUserSimpleInfo:{}", userAccountId);
return null;
}
}
package com.mmc.csf.release.service;
import com.mmc.csf.common.util.web.ResultBody;
import com.mmc.csf.infomation.vo.RequirementsInfoVO;
/**
* @author: zj
* @Date: 2023/5/18 14:29
*/
public interface RequirementsService {
/**
* 需求类型列表
* @return
*/
ResultBody listType();
/**
* 需求发布
* @param requirementsInfoVO
* @return
*/
ResultBody publish(RequirementsInfoVO requirementsInfoVO);
/**
* 解决需求
* @param requirementsInfoId
* @param userAccountId
* @return
*/
ResultBody solveRequire(Integer requirementsInfoId, Integer userAccountId);
}
package com.mmc.csf.release.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.mmc.csf.common.util.web.ResultBody;
import com.mmc.csf.common.util.web.ResultEnum;
import com.mmc.csf.infomation.dto.UserAccountSimpleDTO;
import com.mmc.csf.infomation.vo.RequirementsInfoVO;
import com.mmc.csf.infomation.vo.RequirementsTypeVO;
import com.mmc.csf.release.dao.RequirementsDao;
import com.mmc.csf.release.entity.RequirementsInfoDO;
import com.mmc.csf.release.entity.RequirementsTypeDO;
import com.mmc.csf.release.feign.UserAppApi;
import com.mmc.csf.release.service.RequirementsService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author: zj
* @Date: 2023/5/18 14:29
*/
@Slf4j
@Service
public class RequirementsServiceImpl implements RequirementsService {
@Autowired
private RequirementsDao requirementsDao;
@Autowired
private UserAppApi userAppApi;
@Override
public ResultBody listType() {
List<RequirementsTypeDO> requirementsTypeDOList = requirementsDao.listType();
List<RequirementsTypeVO> requirementsTypeVOList = requirementsTypeDOList.stream().map(RequirementsTypeDO::buildRequirementsTypeVO).collect(Collectors.toList());
return ResultBody.success(requirementsTypeVOList);
}
@Override
public ResultBody publish(RequirementsInfoVO requirementsInfoVO) {
//是否完成认证
UserAccountSimpleDTO userAccountSimpleDTO = userAppApi.feignGetUserSimpleInfo(requirementsInfoVO.getUserAccountId());
if (userAccountSimpleDTO == null || !userAccountSimpleDTO.getCompanyAuthStatus().equals("1")){
return ResultBody.error(ResultEnum.COMPANY_NOT_VERIFY_ERROR);
}
RequirementsInfoDO requirementsInfoDO = new RequirementsInfoDO(requirementsInfoVO);
requirementsDao.addRequirementsInfo(requirementsInfoDO);
return ResultBody.success();
}
@Override
public ResultBody solveRequire(Integer requirementsInfoId, Integer userAccountId) {
RequirementsInfoDO requirementsInfoDO = requirementsDao.getRequirementsInfoById(requirementsInfoId);
if (!requirementsInfoDO.getUserAccountId().toString().equals(userAccountId.toString())){
return ResultBody.error("无权限");
}
requirementsDao.solveRequire(requirementsInfoId);
return ResultBody.success();
}
}
...@@ -113,32 +113,32 @@ mybatis: ...@@ -113,32 +113,32 @@ mybatis:
configuration: configuration:
map-underscore-to-camel-case: true map-underscore-to-camel-case: true
##feign #feign
#feign: feign:
# client: client:
# config: config:
# default: default:
# connect-timeout: 3000 connect-timeout: 3000
# read-timeout: 6000 read-timeout: 6000
# #Okhttp参数配置 #Okhttp参数配置
# httpclient: httpclient:
# enabled: false enabled: false
# okhttp: okhttp:
# enabled: true enabled: true
# hystrix: hystrix:
# enabled: true enabled: true
#hystrix: hystrix:
# command: command:
# default: default:
# execution: execution:
# isolation: isolation:
# thread: thread:
# # hystrix 超时时间 # hystrix 超时时间
# timeoutInMilliseconds: 9000 timeoutInMilliseconds: 9000
##ribbon-ribbo和hystrix时间取最小的生效,feign和ribbon的超时时间只能选其一生效feign优先级高于ribbon #ribbon-ribbo和hystrix时间取最小的生效,feign和ribbon的超时时间只能选其一生效feign优先级高于ribbon
#ribbon: ribbon:
# okhttp: okhttp:
# enabled: true enabled: true
#mmc: #mmc:
# appid: 80001 # appid: 80001
......
spring: spring:
profiles: profiles:
active: test active: dev
--- ---
......
<?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.mmc.csf.release.dao.RequirementsDao">
<insert id="addRequirementsInfo" parameterType="com.mmc.csf.release.entity.RequirementsInfoDO"
keyProperty="id" useGeneratedKeys="true">
INSERT INTO `iuav_ims`.`requirements_info`(`requirement_type_id`, `user_account_id`, `publish_name`, `publish_phone`, `require_description`, `create_time`)
VALUES (#{requirementTypeId}, #{userAccountId}, #{publishName}, #{publishPhone}, #{requireDescription}, NOW());
</insert>
<update id="solveRequire">
update requirements_info set is_solved = 1 where id = #{requirementsInfoId}
</update>
<select id="listType" resultType="com.mmc.csf.release.entity.RequirementsTypeDO">
select id, type_name from requirements_type where is_deleted = 0
</select>
<select id="getRequirementsInfoById" resultType="com.mmc.csf.release.entity.RequirementsInfoDO">
select id, requirement_type_id, user_account_id, publish_name, publish_phone, require_description, is_solved as solved, create_time from requirements_info where id = #{id}
</select>
</mapper>
\ No newline at end of file
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论