huangjn 3 rokov pred
rodič
commit
258bc0a803
31 zmenil súbory, kde vykonal 606 pridanie a 41 odobranie
  1. 4 0
      blade-service-api/blade-business-api/src/main/java/org/springblade/business/entity/UserOpinionComments.java
  2. 114 0
      blade-service-api/blade-business-api/src/main/java/org/springblade/business/vo/BusinessUserOpinionVO.java
  3. 13 0
      blade-service-api/blade-business-api/src/main/java/org/springblade/business/vo/UserOpinionCommentsVO.java
  4. 32 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/ProjectAssignmentUserClient.java
  5. 2 1
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/ProjectClient.java
  6. 97 0
      blade-service/blade-business/src/main/java/org/springblade/business/controller/BusinessUserOpinionController.java
  7. 2 1
      blade-service/blade-business/src/main/java/org/springblade/business/controller/UserOpinionCommentsController.java
  8. 38 12
      blade-service/blade-business/src/main/java/org/springblade/business/controller/UserOpinionController.java
  9. 36 5
      blade-service/blade-business/src/main/java/org/springblade/business/controller/UserOpinionFlowController.java
  10. 21 4
      blade-service/blade-business/src/main/java/org/springblade/business/controller/UserViewProjectContractController.java
  11. 1 1
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/UserOpinionCommentsMapper.xml
  12. 3 0
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/UserOpinionFileMapper.java
  13. 6 0
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/UserOpinionFileMapper.xml
  14. 3 0
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/UserOpinionMapper.java
  15. 46 2
      blade-service/blade-business/src/main/java/org/springblade/business/mapper/UserOpinionMapper.xml
  16. 1 1
      blade-service/blade-business/src/main/java/org/springblade/business/service/IUserOpinionCommentsService.java
  17. 2 0
      blade-service/blade-business/src/main/java/org/springblade/business/service/IUserOpinionFileService.java
  18. 7 0
      blade-service/blade-business/src/main/java/org/springblade/business/service/IUserOpinionService.java
  19. 30 2
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/UserOpinionCommentsServiceImpl.java
  20. 5 0
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/UserOpinionFileServiceImpl.java
  21. 69 5
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/UserOpinionServiceImpl.java
  22. 28 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/feign/ProjectAssignmentUserClientImpl.java
  23. 3 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/feign/ProjectClientImpl.java
  24. 2 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ProjectInfoMapper.java
  25. 4 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ProjectInfoMapper.xml
  26. 7 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/SaveUserInfoByProjectMapper.java
  27. 8 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/SaveUserInfoByProjectMapper.xml
  28. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IProjectInfoService.java
  29. 7 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/SaveUserInfoByProjectService.java
  30. 2 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ProjectInfoServiceImpl.java
  31. 12 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/SaveUserInfoByProjectServiceImpl.java

+ 4 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/entity/UserOpinionComments.java

@@ -20,6 +20,8 @@ import com.baomidou.mybatisplus.annotation.TableName;
 
 import java.io.Serializable;
 
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModelProperty;
 import org.springblade.core.mp.base.BaseEntity;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -48,10 +50,12 @@ public class UserOpinionComments extends BaseEntity {
     /**
      * 回复内容
      */
+    @ApiModelProperty("回复内容")
     private String replyContent;
     /**
      * 点赞量
      */
+    @ApiModelProperty("点赞量")
     private Integer goodCount;
     /**
      * 项目ID,创建人所在项目

+ 114 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/vo/BusinessUserOpinionVO.java

@@ -0,0 +1,114 @@
+package org.springblade.business.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class BusinessUserOpinionVO {
+
+    /**
+     * 工单ID
+     */
+    @ApiModelProperty(value = "工单ID")
+    private Long userOpinionId;
+
+    /**
+     * 提交时间
+     */
+    @ApiModelProperty(value = "提交时间")
+    private Date createTime;
+
+    /**
+     * 剩余时间(分钟)
+     */
+    @ApiModelProperty(value = "剩余时间(分钟)")
+    private String timeRemaining;
+
+    /**
+     * 最后处理时间
+     */
+    @ApiModelProperty(value = "最后处理时间")
+    private String manageTime;
+
+    /**
+     * 项目名称
+     */
+    @ApiModelProperty(value = "项目名称")
+    private String projectName;
+
+    /**
+     * 合同段名称
+     */
+    @ApiModelProperty(value = "合同段名称")
+    private String contractName;
+
+    /**
+     * 问题类型
+     */
+    @ApiModelProperty(value = "问题类型")
+    private String problemType;
+
+    /**
+     * 内容
+     */
+    @ApiModelProperty(value = "内容")
+    private String opinionContent;
+
+    /**
+     * 图片路径
+     */
+    @ApiModelProperty(value = "图片路径")
+    private List<String> imageUrl;
+
+    /**
+     * 当前用户的处理状态(false为异常或未处理,true为已处理,但不一定是最新的)
+     */
+    @ApiModelProperty(value = "当前用户的处理状态(false为异常或未处理,true为已处理,但不一定是最新的)")
+    private Boolean isCurrent;
+
+    /**
+     * 当前用户处理属于第几次流程
+     */
+    @ApiModelProperty(value = "第几次流程")
+    private Integer number;
+
+    /**
+     * 当前用户的评价类型,默认null: 1满意,2不满意并再次提交,3不满意并投诉
+     */
+    @ApiModelProperty(value = "当前用户的评价类型,默认null: 1满意,2不满意并再次提交,3不满意并投诉")
+    private Integer evaluation;
+
+    /**
+     * 当前工单的最新处理状态(false为异常或未处理,true为已处理,但不一定是最新的)
+     */
+    @ApiModelProperty(value = "当前工单的最新处理状态(false为异常或未处理,true为已处理,但不一定是最新的)")
+    private Boolean newIsCurrent;
+
+    /**
+     * 当前工单最新的流程
+     */
+    @ApiModelProperty(value = "当前工单最新的流程")
+    private Integer newNumber;
+
+    /**
+     * 当前流程能否被当前登录用户操作
+     */
+    @ApiModelProperty(value = "当前流程能否被当前登录用户操作")
+    private Boolean operation;
+
+    /**
+     * 当前环节ID
+     */
+    @ApiModelProperty(value = "当前环节ID")
+    private Long currentLinkId;
+
+    /**
+     * 当前环节
+     */
+    @ApiModelProperty(value = "当前环节")
+    private Integer currentLink;
+
+}

+ 13 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/vo/UserOpinionCommentsVO.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.business.vo;
 
+import io.swagger.annotations.ApiModelProperty;
 import org.springblade.business.entity.UserOpinionComments;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -31,4 +32,16 @@ import lombok.EqualsAndHashCode;
 public class UserOpinionCommentsVO extends UserOpinionComments {
 	private static final long serialVersionUID = 1L;
 
+	/**
+	 * 用户头像
+	 */
+	@ApiModelProperty(value = "用户头像")
+	private String avatar;
+
+	/**
+	 * 用户姓名
+	 */
+	@ApiModelProperty(value = "用户姓名")
+	private String userName;
+
 }

+ 32 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/ProjectAssignmentUserClient.java

@@ -0,0 +1,32 @@
+package org.springblade.manager.feign;
+
+import org.springblade.manager.dto.SaveUserInfoByProjectDTO;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+
+import static org.springblade.core.launch.constant.AppConstant.APPLICATION_NAME_PREFIX;
+
+@FeignClient(value = APPLICATION_NAME_PREFIX +  "manager")
+public interface ProjectAssignmentUserClient {
+
+    /**
+     * 接口前缀
+     */
+    String API_PREFIX = "/api/manager/projectAssignmentUser";
+
+    @GetMapping(API_PREFIX + "/queryCurrentUserDownAllContractAndProjectId")
+    List<SaveUserInfoByProjectDTO> queryCurrentUserDownAllContractAndProjectId(@RequestParam Long userId);
+
+    /**
+     * 根据项目ID及合同段ID获取当前绑定的维护人员
+     * @param projectId 项目ID
+     * @param contractId 合同段ID
+     * @return 结果
+     */
+    @GetMapping(API_PREFIX + "/queryCurrentProjectContractAssignmentUserList")
+    List<SaveUserInfoByProjectDTO> queryCurrentProjectContractAssignmentUserList(@RequestParam Long projectId, @RequestParam Long contractId);
+
+}

+ 2 - 1
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/ProjectClient.java

@@ -3,6 +3,7 @@ package org.springblade.manager.feign;
 import org.springblade.manager.entity.ProjectInfo;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 
 import java.util.List;
 
@@ -21,6 +22,6 @@ public interface ProjectClient {
      * @return 结果集
      */
     @GetMapping(API_PREFIX + "/queryProjectList")
-    List<ProjectInfo> queryProjectList();
+    List<ProjectInfo> queryProjectList(@RequestParam List<String> projectIds);
 
 }

+ 97 - 0
blade-service/blade-business/src/main/java/org/springblade/business/controller/BusinessUserOpinionController.java

@@ -0,0 +1,97 @@
+package org.springblade.business.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.apache.commons.lang.StringUtils;
+import org.springblade.business.entity.UserOpinionFlow;
+import org.springblade.business.service.IUserOpinionFlowService;
+import org.springblade.business.service.IUserOpinionService;
+import org.springblade.business.vo.BusinessUserOpinionVO;
+import org.springblade.business.vo.UserOpinionFlowVO;
+import org.springblade.common.utils.CommonUtil;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.BladeUser;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
+import org.springframework.web.bind.annotation.*;
+
+import java.sql.Wrapper;
+import java.util.List;
+
+@RestController
+@AllArgsConstructor
+@RequestMapping("/businessUserOpinion")
+@Api(tags = "维护人员工单列表")
+public class BusinessUserOpinionController {
+
+    private final IUserOpinionService userOpinionService;
+
+    private final IUserOpinionFlowService userOpinionFlowService;
+
+    /**
+     * 业务人员提交环节操作
+     * @return 结果
+     */
+    @PostMapping("/manageUserOperationStatus")
+    @ApiOperationSupport(order = 2)
+    @ApiOperation(value = "提交")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "userOpinionId", value = "工单ID", required = true),
+            @ApiImplicitParam(name = "newNumber", value = "当前流程次数", required = true),
+            @ApiImplicitParam(name = "currentLinkId", value = "当前环节ID", required = true)
+    })
+    public R<Boolean> manageUserOperationStatus(@RequestParam String userOpinionId, @RequestParam Integer newNumber, @RequestParam String currentLinkId){
+        if(StringUtils.isEmpty(currentLinkId)){
+            return R.data(-1, false, "缺少currentLinkId参数");
+        }
+        //获取当前最新流程
+        List<UserOpinionFlowVO> flowVOS = this.userOpinionFlowService.queryCurrentUserOpinionFlowByUserOpinionId(userOpinionId, newNumber);
+        //找到当前环节的下一环节
+        Long nextLinkOne = null, nextLinkTow = null;
+        for(int i = 0, l = flowVOS.size(); i < l; i ++){
+            if(new Long(currentLinkId).equals(flowVOS.get(i).getUserOpinionId())){
+                //找到下一个环节ID,判断下一环节是不是4,如果是,说明当前操作是已解决
+
+            }
+        }
+
+        this.userOpinionFlowService.update(Wrappers.<UserOpinionFlow>lambdaUpdate().set(UserOpinionFlow::getIsCurrent, 2));
+        return R.data(false);
+    }
+
+    /**
+     * 获取分配给当前登录用户的工单记录
+     * @return 结果集
+     */
+    @GetMapping("/queryBusinessUserOpinionList")
+    @ApiOperationSupport(order = 1)
+    @ApiOperation(value = "获取分配给当前登录用户的工单记录")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "current", value = "当前页", required = true),
+            @ApiImplicitParam(name = "size", value = "当前页显示数量", required = true)
+    })
+    public R<IPage<BusinessUserOpinionVO>> queryBusinessUserOpinionList(@RequestBody Query query){
+        BladeUser user = AuthUtil.getUser();
+        //获取推送给当前用户的工单信息
+        List<BusinessUserOpinionVO> result = this.userOpinionService.queryBusinessUserOpinionList(String.valueOf(user.getUserId()));
+
+        if(result != null && result.size() > 0){
+            //分组
+            List<List<BusinessUserOpinionVO>> groupList = CommonUtil.getBatchSize(result, query.getSize());
+
+            IPage<BusinessUserOpinionVO> page = Condition.getPage(query);
+            page.setTotal(result.size());
+            page.setRecords(groupList.get(query.getCurrent() == 0 ? 0 : query.getCurrent() - 1));
+            return R.data(page);
+        }
+        return R.data(null);
+    }
+
+}

+ 2 - 1
blade-service/blade-business/src/main/java/org/springblade/business/controller/UserOpinionCommentsController.java

@@ -20,6 +20,7 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import lombok.AllArgsConstructor;
+import org.springblade.business.vo.UserOpinionCommentsVO;
 import org.springblade.core.secure.BladeUser;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
@@ -56,7 +57,7 @@ public class UserOpinionCommentsController extends BladeController {
 	@GetMapping("/queryUserOpinionCommentsByUserOpinionId")
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "获取当前工单下的所有评论")
-	public R<List<UserOpinionComments>> queryUserOpinionCommentsByUserOpinionId(@RequestParam String userOpinionId){
+	public R<List<UserOpinionCommentsVO>> queryUserOpinionCommentsByUserOpinionId(@RequestParam String userOpinionId){
 		return R.data(this.userOpinionCommentsService.queryUserOpinionCommentsByUserOpinionId(userOpinionId));
 	}
 

+ 38 - 12
blade-service/blade-business/src/main/java/org/springblade/business/controller/UserOpinionController.java

@@ -14,15 +14,19 @@ import org.springblade.business.entity.UserOpinionFile;
 import org.springblade.business.entity.UserOpinionFlow;
 import org.springblade.business.service.IUserOpinionFileService;
 import org.springblade.business.service.IUserOpinionFlowService;
-import org.springblade.common.utils.IDUtils;
+import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.secure.BladeUser;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.DateUtil;
+import org.springblade.manager.dto.SaveUserInfoByProjectDTO;
+import org.springblade.manager.feign.ProjectAssignmentUserClient;
 import org.springblade.system.entity.DictBiz;
 import org.springblade.system.feign.IDictBizClient;
+import org.springblade.system.user.entity.User;
+import org.springblade.system.user.feign.IUserClient;
 import org.springblade.system.vo.DictBizVO;
 import org.springframework.beans.BeanUtils;
 import org.springframework.web.bind.annotation.*;
@@ -33,10 +37,7 @@ import org.springblade.business.vo.UserOpinionVO;
 import org.springblade.business.service.IUserOpinionService;
 import org.springblade.core.boot.ctrl.BladeController;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.Iterator;
-import java.util.List;
+import java.util.*;
 
 /**
  * 用户意见表 控制器
@@ -58,6 +59,10 @@ public class UserOpinionController extends BladeController {
 
 	private final IDictBizClient dictBizClient;
 
+	private final ProjectAssignmentUserClient projectAssignmentUserClient;
+
+	private final IUserClient userClient;
+
 	/**
 	 * 获取工单服务相关数据字典
 	 * @return 结果
@@ -156,7 +161,7 @@ public class UserOpinionController extends BladeController {
 		//设置用户信息
 		this.setUserData(userOpinionVo);
 		//生成主表ID
-		long idKey = IDUtils.generateId19();
+		long idKey = SnowFlakeUtil.getId();
 		userOpinionVo.setId(idKey);
 
 		//获取附件信息
@@ -183,18 +188,39 @@ public class UserOpinionController extends BladeController {
 			//新增附件信息
 			this.userOpinionFileService.saveBatch(saveFileList);
 		}
+		//获取当前项目合同段下分配的维护人员
+		String manageUserName = "admin", manegeUserPhone = "";
+		Long manageUser = 1123598821738675201L;
+		try{
+			List<SaveUserInfoByProjectDTO> assignmentUserList = this.projectAssignmentUserClient.queryCurrentProjectContractAssignmentUserList(userOpinionVo.getProjectId(), userOpinionVo.getContractId());
+			if(assignmentUserList != null && assignmentUserList.size() > 0){
+				//有分配人员,随机获取某一个人员
+				Random random = new Random();
+				//随机结果集长度下的数量
+				int ran = random.nextInt(assignmentUserList.size());
+				SaveUserInfoByProjectDTO userDto = assignmentUserList.get(ran);
+				User user = this.userClient.userInfoById(Long.parseLong(userDto.getUserId())).getData();
+				if(user != null){
+					manageUser = user.getId();
+					manageUserName = user.getRealName();
+					manegeUserPhone = user.getPhone();
+				}
+			}
+		}catch (Exception e){
+			e.printStackTrace();
+		}
 
 		//生成第一次流程
 		List<UserOpinionFlow> saveFlowList = new ArrayList<>();
+		String manageTime = DateUtil.format(DateUtils.addDays(new Date(), 5), "yyyy-MM-dd");
 		//提交成功环节
-		saveFlowList.add(setUserData(new UserOpinionFlow(idKey, 2, 1, 1, "已提交", "已成功提交您的工单信息", null, 123654L, "马自达", "123456789")));
+		saveFlowList.add(setUserData(new UserOpinionFlow(idKey, 2, 1, 1, "已提交", "已成功提交您的工单信息", manageTime, manageUser, manageUserName, manegeUserPhone)));
 		//分配维护人员环节
-		saveFlowList.add(setUserData(new UserOpinionFlow(idKey, 1, 1, 2, "已分配专属客服", "客服:马自达<br>电话:123456789", null, 123654L, "马自达", "123456789")));
+		saveFlowList.add(setUserData(new UserOpinionFlow(idKey, 1, 1, 2, "已分配专属客服", "客服:" + manageUser + "<br>电话:" + manegeUserPhone, manageTime, manageUser, manageUserName, manegeUserPhone)));
 		//进入人工预处理环节
-		String manageTime = DateUtil.format(DateUtils.addDays(new Date(), 5), "yyyy-MM-dd");
-		saveFlowList.add(setUserData(new UserOpinionFlow(idKey, 0, 1, 3, "进入人工预处理环节", "预计" + manageTime + "之前完成", manageTime, 123654L, "马自达", "123456789")));
+		saveFlowList.add(setUserData(new UserOpinionFlow(idKey, 0, 1, 3, "进入人工预处理环节", "预计" + manageTime + "之前完成", manageTime, manageUser, manageUserName, manegeUserPhone)));
 		//问题已解决
-		saveFlowList.add(setUserData(new UserOpinionFlow(idKey, 0, 1, 4, "问题已解决", null, null, 123654L, "马自达", "123456789")));
+		saveFlowList.add(setUserData(new UserOpinionFlow(idKey, 0, 1, 4, "问题已解决", null, manageTime, manageUser, manageUserName, manegeUserPhone)));
 		//新增处理环节
 		this.userOpinionFlowService.saveBatch(saveFlowList);
 		//最后新增主表数据
@@ -219,7 +245,7 @@ public class UserOpinionController extends BladeController {
 		//获取当前登录人
 		BladeUser user = AuthUtil.getUser();
 		userOpinion.setCreateUser(user.getUserId());
-		userOpinion.setCreateUserName(user.getUserName());
+		userOpinion.setCreateUserName(user.getRoleName());
 		userOpinion.setCreateDept(user.getDeptId().contains(",") ? Long.parseLong(user.getDeptId().split(",")[0]) : Long.parseLong(user.getDeptId()));
 	}
 }

+ 36 - 5
blade-service/blade-business/src/main/java/org/springblade/business/controller/UserOpinionFlowController.java

@@ -32,6 +32,10 @@ import org.springblade.core.secure.BladeUser;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.DateUtil;
+import org.springblade.manager.dto.SaveUserInfoByProjectDTO;
+import org.springblade.manager.feign.ProjectAssignmentUserClient;
+import org.springblade.system.user.entity.User;
+import org.springblade.system.user.feign.IUserClient;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springblade.business.entity.UserOpinionFlow;
@@ -41,6 +45,7 @@ import org.springblade.core.boot.ctrl.BladeController;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Random;
 
 /**
  * 用户意见处理流程表 控制器
@@ -58,6 +63,10 @@ public class UserOpinionFlowController extends BladeController {
 
 	private final IUserOpinionService userOpinionService;
 
+	private final ProjectAssignmentUserClient projectAssignmentUserClient;
+
+	private final IUserClient userClient;
+
 	/**
 	 * 统合接口
 	 * @param oldEndFlow 流程图的最后一个节点ID
@@ -118,17 +127,39 @@ public class UserOpinionFlowController extends BladeController {
 			Integer newNumber = userOpinion.getNumber() + 1;
 			userOpinion.setNumber(newNumber);
 
+			//获取当前项目合同段下分配的维护人员
+			String manageUserName = "admin", manegeUserPhone = "";
+			Long manageUser = 1123598821738675201L;
+			try{
+				List<SaveUserInfoByProjectDTO> assignmentUserList = this.projectAssignmentUserClient.queryCurrentProjectContractAssignmentUserList(userOpinion.getProjectId(), userOpinion.getContractId());
+				if(assignmentUserList != null && assignmentUserList.size() > 0){
+					//有分配人员,随机获取某一个人员
+					Random random = new Random();
+					//随机结果集长度下的数量
+					int ran = random.nextInt(assignmentUserList.size());
+					SaveUserInfoByProjectDTO userDto = assignmentUserList.get(ran);
+					User user = this.userClient.userInfoById(Long.parseLong(userDto.getUserId())).getData();
+					if(user != null){
+						manageUser = user.getId();
+						manageUserName = user.getRealName();
+						manegeUserPhone = user.getPhone();
+					}
+				}
+			}catch (Exception e){
+				e.printStackTrace();
+			}
+
 			//生成新流程
 			List<UserOpinionFlow> saveFlowList = new ArrayList<>();
+			String manageTime = DateUtil.format(DateUtils.addDays(new Date(), 5), "yyyy-MM-dd");
 			//提交成功环节
-			saveFlowList.add(this.setUserData(new UserOpinionFlow(Long.parseLong(userOpinionId), 2, newNumber, 1, "已提交", "已成功提交您的工单信息", null, 123654L, "马自达", "123456789"), true));
+			saveFlowList.add(this.setUserData(new UserOpinionFlow(Long.parseLong(userOpinionId), 2, newNumber, 1, "已提交", "已成功提交您的工单信息", manageTime, manageUser, manageUserName, manegeUserPhone), true));
 			//分配维护人员环节
-			saveFlowList.add(this.setUserData(new UserOpinionFlow(Long.parseLong(userOpinionId), 1, newNumber, 2, "已分配专属客服", "客服:马自达<br>电话:123456789", null, 123654L, "马自达", "123456789"), true));
+			saveFlowList.add(this.setUserData(new UserOpinionFlow(Long.parseLong(userOpinionId), 1, newNumber, 2, "已分配专属客服", "客服:"+manageUserName+"<br>电话:" + manegeUserPhone, manageTime, manageUser, manageUserName, manegeUserPhone), true));
 			//进入人工预处理环节
-			String manageTime = DateUtil.format(DateUtils.addDays(new Date(), 5), "yyyy-MM-dd");
-			saveFlowList.add(this.setUserData(new UserOpinionFlow(Long.parseLong(userOpinionId), 0, newNumber, 3, "进入人工预处理环节", "预计" + manageTime + "之前完成", manageTime, 123654L, "马自达", "123456789"), true));
+			saveFlowList.add(this.setUserData(new UserOpinionFlow(Long.parseLong(userOpinionId), 0, newNumber, 3, "进入人工预处理环节", "预计" + manageTime + "之前完成", manageTime, manageUser, manageUserName, manegeUserPhone), true));
 			//问题已解决
-			saveFlowList.add(this.setUserData(new UserOpinionFlow(Long.parseLong(userOpinionId), 0, newNumber, 4, "问题已解决", null, null, 123654L, "马自达", "123456789"), true));
+			saveFlowList.add(this.setUserData(new UserOpinionFlow(Long.parseLong(userOpinionId), 0, newNumber, 4, "问题已解决", null, manageTime, manageUser, manageUserName, manegeUserPhone), true));
 
 			//修改流程
 			this.userOpinionFlowService.updateById(oldFlow);

+ 21 - 4
blade-service/blade-business/src/main/java/org/springblade/business/controller/UserViewProjectContractController.java

@@ -6,10 +6,14 @@ import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
+import org.springblade.core.secure.BladeUser;
+import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
+import org.springblade.manager.dto.SaveUserInfoByProjectDTO;
 import org.springblade.manager.entity.ContractInfo;
 import org.springblade.manager.entity.ProjectInfo;
 import org.springblade.manager.feign.ContractClient;
+import org.springblade.manager.feign.ProjectAssignmentUserClient;
 import org.springblade.manager.feign.ProjectClient;
 import org.springblade.manager.vo.ContractInfoVO;
 import org.springblade.manager.vo.ProjectInfoVO;
@@ -31,6 +35,8 @@ public class UserViewProjectContractController {
 
     private final ContractClient contractClient;
 
+    private final ProjectAssignmentUserClient projectAssignmentUserClient;
+
     /**
      * 获取客户端首页当前用户关联的项目及合同段信息
      * @return 项目及合同段结果集
@@ -39,19 +45,30 @@ public class UserViewProjectContractController {
     @ApiOperationSupport(order = 1)
     @ApiOperation(value = "获取客户端首页当前用户关联的项目及合同段信息")
     public R<List<ProjectInfoVO>> queryUserViewProjectAndContract(){
+        BladeUser user = AuthUtil.getUser();
+        if(user == null){
+            return R.data(null);
+        }
+        //获取当前用户的所有相关项目及合同段ID
+        List<SaveUserInfoByProjectDTO> userDownAll = this.projectAssignmentUserClient.queryCurrentUserDownAllContractAndProjectId(user.getUserId());
+        //获取项目ID
+        List<String> projectIds = userDownAll.stream().map(SaveUserInfoByProjectDTO::getProjectId).distinct().collect(Collectors.toList());
+        //获取合同段ID
+        List<String> contractIds = userDownAll.stream().map(SaveUserInfoByProjectDTO::getContractId).distinct().collect(Collectors.toList());
+
         //获取项目列表
-        List<ProjectInfo> projectInfos =this.projectClient.queryProjectList();
+        List<ProjectInfo> projectInfos = this.projectClient.queryProjectList(projectIds);
         if(projectInfos != null && projectInfos.size() != 0){
-            //获取所有项目ID
-            List<Long> projectIds = projectInfos.stream().map(ProjectInfo::getId).distinct().collect(Collectors.toList());
+            List<Long> longProjectIds = projectInfos.stream().map(ProjectInfo::getId).distinct().collect(Collectors.toList());
             //获取当前所有合同段
-            List<ContractInfo> contractInfos = this.contractClient.queryContractListByIds(projectIds);
+            List<ContractInfo> contractInfos = this.contractClient.queryContractListByIds(longProjectIds);
 
             //转换VO
             List<ProjectInfoVO> projectInfoVOS = JSONArray.parseArray(JSONObject.toJSONString(projectInfos), ProjectInfoVO.class);
             if(contractInfos != null && contractInfos.size() != 0){
                 //转换VO
                 List<ContractInfoVO> contractInfoVOS = JSONArray.parseArray(JSONObject.toJSONString(contractInfos), ContractInfoVO.class);
+                contractInfoVOS.removeIf(vo -> !contractIds.contains(String.valueOf(vo.getId())));
 
                 projectInfoVOS.forEach(vo -> {
                     //统一返回格式

+ 1 - 1
blade-service/blade-business/src/main/java/org/springblade/business/mapper/UserOpinionCommentsMapper.xml

@@ -21,7 +21,7 @@
     </resultMap>
 
     <select id="queryUserOpinionCommentsByUserOpinionId" resultMap="userOpinionCommentsResultMap">
-        select id,user_opinion_id,reply_id,reply_content,good_count,project_id,contract_id from u_user_opinion_comments where user_opinion_id = #{key} and is_deleted = 0
+        select id,user_opinion_id,reply_id,reply_content,good_count,project_id,contract_id,create_user,create_time from u_user_opinion_comments where user_opinion_id = #{key} and is_deleted = 0
     </select>
 
     <select id="countCommentsByUserOpinionKey" resultType="java.lang.Integer">

+ 3 - 0
blade-service/blade-business/src/main/java/org/springblade/business/mapper/UserOpinionFileMapper.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.business.mapper;
 
+import org.apache.ibatis.annotations.Param;
 import org.springblade.business.entity.UserOpinionFile;
 import org.springblade.business.vo.UserOpinionFileVO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -30,6 +31,8 @@ import java.util.List;
  */
 public interface UserOpinionFileMapper extends BaseMapper<UserOpinionFile> {
 
+	List<UserOpinionFile> selectUserOpinionFileByUserOpinionKeys(@Param("userOpinionKeys") List<Long> userOpinionKeys);
+
 	/**
 	 * 自定义分页
 	 *

+ 6 - 0
blade-service/blade-business/src/main/java/org/springblade/business/mapper/UserOpinionFileMapper.xml

@@ -11,6 +11,12 @@
         <result column="file_url" property="fileUrl"/>
     </resultMap>
 
+    <select id="selectUserOpinionFileByUserOpinionKeys" resultMap="userOpinionFileResultMap">
+        select file_url,user_opinion_id from u_user_opinion_file where is_deleted= 0 and user_opinion_id in
+        <foreach collection="userOpinionKeys" item="key" open="(" separator="," close=")">
+            #{key}
+        </foreach>
+    </select>
 
     <select id="selectUserOpinionFilePage" resultMap="userOpinionFileResultMap">
         select * from u_user_opinion_file where is_deleted = 0

+ 3 - 0
blade-service/blade-business/src/main/java/org/springblade/business/mapper/UserOpinionMapper.java

@@ -18,6 +18,7 @@ package org.springblade.business.mapper;
 
 import org.apache.ibatis.annotations.Param;
 import org.springblade.business.entity.UserOpinion;
+import org.springblade.business.vo.BusinessUserOpinionVO;
 import org.springblade.business.vo.UserOpinionVO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -31,6 +32,8 @@ import java.util.List;
  */
 public interface UserOpinionMapper extends BaseMapper<UserOpinion> {
 
+	List<BusinessUserOpinionVO> queryManageUserOpinionList(@Param("currentUser") String currentUser);
+
 	List<UserOpinion> queryCurrentUserOpinionList(@Param("userId")Long userId);
 
 	/**

+ 46 - 2
blade-service/blade-business/src/main/java/org/springblade/business/mapper/UserOpinionMapper.xml

@@ -21,12 +21,56 @@
         <result column="good_number" property="goodNumber"/>
     </resultMap>
 
+    <resultMap id="businessUserOpinionMap" type="org.springblade.business.vo.BusinessUserOpinionVO">
+        <result column="userOpinionId" property="userOpinionId"/>
+        <result column="createTime" property="createTime"/>
+        <result column="manageTime" property="manageTime"/>
+        <result column="create_time" property="createTime"/>
+        <result column="projectName" property="projectName"/>
+        <result column="contractId" property="contractName"/>
+        <result column="problemType" property="problemType"/>
+        <result column="opinionContent" property="opinionContent"/>
+        <result column="isCurrent" property="isCurrent"/>
+        <result column="number" property="number"/>
+        <result column="newNumber" property="newNumber"/>
+        <result column="evaluation" property="evaluation"/>
+    </resultMap>
+
+    <select id="queryManageUserOpinionList" resultMap="businessUserOpinionMap">
+        select
+            uo.id as userOpinionId,
+            uo.create_time as createTime,
+            uof.manage_time as manageTime,
+            pi.project_name as projectName,
+            ci.contract_name as contractName,
+            uo.problem_type as problemType,
+            uo.opinion_content as opinionContent,
+            case uof.is_current
+            when 2 then 'true' else 'false' end as isCurrent,
+            uof.number as number,
+	        uo.number as newNumber,
+            uof.evaluation as evaluation
+        from
+            u_user_opinion as uo
+        left join m_project_info as pi on uo.project_id = pi.id
+        left join m_contract_info as ci on uo.contract_id = ci.id
+        right join (
+            select
+                uof.*
+            from
+            (
+                select user_opinion_id,is_current,manage_time,number,sort,evaluation from u_user_opinion_flow where manage_user = #{currentUser} and sort = 4 order by number DESC
+            ) as uof group by uof.user_opinion_id
+        ) as uof on uof.user_opinion_id = uo.id
+        where uo.is_deleted = 0;
+    </select>
+
     <select id="queryCurrentUserOpinionList" resultMap="userOpinionResultMap">
-        select id, problem_type, create_time, number from u_user_opinion where create_user = #{userId} and is_deleted = 0 order by create_time DESC
+        select id,project_id,contract_id,opinion_content,problem_type,create_time,good_number, number,create_user,create_user_name from u_user_opinion where create_user = #{userId} and is_deleted = 0 order by create_time DESC
     </select>
 
     <select id="selectUserOpinionPage" resultMap="userOpinionResultMap">
-        select id,project_id,contract_id,opinion_content,problem_type,good_number, create_user from u_user_opinion where is_deleted = 0 and create_user != #{currentUser} order by create_time DESC limit ${current},${size}
+        select id,project_id,contract_id,opinion_content,problem_type,create_time,good_number, number,create_user,create_user_name from u_user_opinion where is_deleted = 0 and create_user != #{currentUser} order by create_time DESC limit ${current},${size}
     </select>
 
 </mapper>

+ 1 - 1
blade-service/blade-business/src/main/java/org/springblade/business/service/IUserOpinionCommentsService.java

@@ -32,7 +32,7 @@ import java.util.Map;
  */
 public interface IUserOpinionCommentsService extends BaseService<UserOpinionComments> {
 
-	List<UserOpinionComments> queryUserOpinionCommentsByUserOpinionId(String userOpinionId);
+	List<UserOpinionCommentsVO> queryUserOpinionCommentsByUserOpinionId(String userOpinionId);
 
 	Map<String,Integer> selectCommentsAndGoodCountByUserOpinionKey(Long userOpinionKey);
 

+ 2 - 0
blade-service/blade-business/src/main/java/org/springblade/business/service/IUserOpinionFileService.java

@@ -31,6 +31,8 @@ import java.util.List;
  */
 public interface IUserOpinionFileService extends BaseService<UserOpinionFile> {
 
+	List<UserOpinionFile> selectUserOpinionFileByUserOpinionKeys(List<Long> userOpinionKeys);
+
 	/**
 	 * 获取具体工单相关附件
 	 * @param userOpinionKey 主表u_user_opinion主键

+ 7 - 0
blade-service/blade-business/src/main/java/org/springblade/business/service/IUserOpinionService.java

@@ -17,6 +17,7 @@
 package org.springblade.business.service;
 
 import org.springblade.business.entity.UserOpinion;
+import org.springblade.business.vo.BusinessUserOpinionVO;
 import org.springblade.business.vo.UserOpinionVO;
 import org.springblade.core.mp.base.BaseService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -32,6 +33,12 @@ import java.util.List;
  */
 public interface IUserOpinionService extends BaseService<UserOpinion> {
 
+	/**
+	 * 获取分配给当前登录用户的工单记录
+	 * @return 结果集
+	 */
+	List<BusinessUserOpinionVO> queryBusinessUserOpinionList(String currentUserId);
+
 	/**
 	 * 获取当前用户提交的工单信息
 	 * @param user 用户

+ 30 - 2
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/UserOpinionCommentsServiceImpl.java

@@ -16,11 +16,17 @@
  */
 package org.springblade.business.service.impl;
 
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import lombok.AllArgsConstructor;
+import org.apache.commons.lang.StringUtils;
 import org.springblade.business.entity.UserOpinionComments;
 import org.springblade.business.vo.UserOpinionCommentsVO;
 import org.springblade.business.mapper.UserOpinionCommentsMapper;
 import org.springblade.business.service.IUserOpinionCommentsService;
 import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.system.user.entity.User;
+import org.springblade.system.user.feign.IUserClient;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
@@ -35,11 +41,33 @@ import java.util.Map;
  * @since 2022-05-25
  */
 @Service
+@AllArgsConstructor
 public class UserOpinionCommentsServiceImpl extends BaseServiceImpl<UserOpinionCommentsMapper, UserOpinionComments> implements IUserOpinionCommentsService {
 
+	private final IUserClient userClient;
+
 	@Override
-	public List<UserOpinionComments> queryUserOpinionCommentsByUserOpinionId(String userOpinionId) {
-		return this.baseMapper.queryUserOpinionCommentsByUserOpinionId(userOpinionId);
+	public List<UserOpinionCommentsVO> queryUserOpinionCommentsByUserOpinionId(String userOpinionId) {
+		List<UserOpinionComments> result = this.baseMapper.queryUserOpinionCommentsByUserOpinionId(userOpinionId);
+		if(result != null && result.size() > 0){
+			List<UserOpinionCommentsVO> voResult = JSONArray.parseArray(JSONObject.toJSONString(result), UserOpinionCommentsVO.class);
+			voResult.forEach(vo -> {
+				try{
+					if(StringUtils.isNotEmpty(String.valueOf(vo.getCreateUser())) && !"null".equals(String.valueOf(vo.getCreateUser()))){
+						//获取用户信息
+						User user = this.userClient.userInfoById(vo.getCreateUser()).getData();
+						if(user != null){
+							vo.setAvatar(user.getAvatar());
+							vo.setUserName(user.getRealName());
+						}
+					}
+				}catch (Exception e){
+					e.printStackTrace();
+				}
+			});
+			return voResult;
+		}
+		return null;
 	}
 
 	@Override

+ 5 - 0
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/UserOpinionFileServiceImpl.java

@@ -37,6 +37,11 @@ import java.util.Map;
 @Service
 public class UserOpinionFileServiceImpl extends BaseServiceImpl<UserOpinionFileMapper, UserOpinionFile> implements IUserOpinionFileService {
 
+	@Override
+	public List<UserOpinionFile> selectUserOpinionFileByUserOpinionKeys(List<Long> userOpinionKeys) {
+		return this.baseMapper.selectUserOpinionFileByUserOpinionKeys(userOpinionKeys);
+	}
+
 	@Override
 	public List<UserOpinionFile> selectUserOpinionFileByUserOpinionKey(Long userOpinionKey) {
 		Map<String,Object> queryMap = new HashMap<>();

+ 69 - 5
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/UserOpinionServiceImpl.java

@@ -27,6 +27,7 @@ import org.springblade.business.entity.UserOpinionFlow;
 import org.springblade.business.service.IUserOpinionCommentsService;
 import org.springblade.business.service.IUserOpinionFileService;
 import org.springblade.business.service.IUserOpinionFlowService;
+import org.springblade.business.vo.BusinessUserOpinionVO;
 import org.springblade.business.vo.UserOpinionFlowVO;
 import org.springblade.business.vo.UserOpinionVO;
 import org.springblade.business.mapper.UserOpinionMapper;
@@ -38,6 +39,8 @@ import org.springblade.system.user.feign.IUserClient;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 
+import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -60,6 +63,63 @@ public class UserOpinionServiceImpl extends BaseServiceImpl<UserOpinionMapper, U
 
 	private final IUserClient userClient;
 
+	@Override
+	public List<BusinessUserOpinionVO> queryBusinessUserOpinionList(String currentUserId) {
+		//获取分配给当前用户的工单
+		List<BusinessUserOpinionVO> businessUserOpinionVOS = this.baseMapper.queryManageUserOpinionList(currentUserId);
+		if(businessUserOpinionVOS != null && businessUserOpinionVOS.size() > 0){
+			//获取得到的工单所关联的所有附件
+			List<Long> userOpinionKeys = businessUserOpinionVOS.stream().map(BusinessUserOpinionVO::getUserOpinionId).distinct().collect(Collectors.toList());
+			List<UserOpinionFile> allFile = this.userOpinionFileService.selectUserOpinionFileByUserOpinionKeys(userOpinionKeys);
+
+			//设置附件信息
+			businessUserOpinionVOS.forEach(vo -> {
+				List<String> imageUrls = new ArrayList<>();
+				if(allFile != null && allFile.size() > 0){
+					//处理附件信息
+					Iterator<UserOpinionFile> iterator = allFile.iterator();
+					while (iterator.hasNext()){
+						UserOpinionFile nextFile = iterator.next();
+						if(nextFile.getUserOpinionId().equals(vo.getUserOpinionId())){
+							imageUrls.add(nextFile.getFileUrl());
+							iterator.remove();
+						}
+					}
+				}
+				//设置附件信息
+				vo.setImageUrl(imageUrls);
+				//设置当前用户操作权限(如果当前用户的流程次数和主表次数一致,认为可以操作)
+				vo.setOperation(vo.getNumber().equals(vo.getNewNumber()));
+
+				//获取当前工单最新状态
+				if(new Long("4336330718665349716").equals(vo.getUserOpinionId())){
+					int i = 0;
+				}
+				List<UserOpinionFlowVO> newFlow = this.userOpinionFlowService.queryCurrentUserOpinionFlowByUserOpinionId(String.valueOf(vo.getUserOpinionId()), vo.getNewNumber());
+				if(newFlow != null && newFlow.size() > 0){
+					//获取退后阶段
+					UserOpinionFlowVO flow = newFlow.get(3);
+					//设置最后的处理结果
+					vo.setNewIsCurrent(flow.getCurrentBol());
+					if(!vo.getNewIsCurrent()){
+						//如果有权限则获取当前正在进行的操作环节
+						for(UserOpinionFlowVO flowVo : newFlow){
+							//依次找到正在执行的环节
+							if(new Integer("1").equals(flowVo.getIsCurrent())){
+								vo.setCurrentLinkId(flowVo.getId());
+								vo.setCurrentLink(flowVo.getSort());
+								break;
+							}
+						}
+					}
+				}
+			});
+			return businessUserOpinionVOS;
+		}
+
+		return null;
+	}
+
 	/**
 	 * 获取当前用户提交的工单信息
 	 * @param user 用户
@@ -126,12 +186,16 @@ public class UserOpinionServiceImpl extends BaseServiceImpl<UserOpinionMapper, U
 				if(isSolve == 2){
 					vo.setIsSolve(1);
 				}
-				if(StringUtils.isNotEmpty(String.valueOf(vo.getCreateUser())) && !"null".equals(String.valueOf(vo.getCreateUser()))){
-					//获取用户信息
-					User user = this.userClient.userInfoById(vo.getCreateUser()).getData();
-					if(user != null){
-						vo.setAvatar(user.getAvatar());
+				try{
+					if(StringUtils.isNotEmpty(String.valueOf(vo.getCreateUser())) && !"null".equals(String.valueOf(vo.getCreateUser()))){
+						//获取用户信息
+						User user = this.userClient.userInfoById(vo.getCreateUser()).getData();
+						if(user != null){
+							vo.setAvatar(user.getAvatar());
+						}
 					}
+				}catch (Exception e){
+					e.printStackTrace();
 				}
 			});
 			return page.setRecords(resultVo);

+ 28 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/feign/ProjectAssignmentUserClientImpl.java

@@ -0,0 +1,28 @@
+package org.springblade.manager.feign;
+
+import lombok.AllArgsConstructor;
+import org.apache.commons.lang.StringUtils;
+import org.springblade.manager.dto.SaveUserInfoByProjectDTO;
+import org.springblade.manager.service.SaveUserInfoByProjectService;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@AllArgsConstructor
+public class ProjectAssignmentUserClientImpl implements ProjectAssignmentUserClient {
+
+    private final SaveUserInfoByProjectService saveUserInfoByProjectService;
+
+    @Override
+    public List<SaveUserInfoByProjectDTO> queryCurrentUserDownAllContractAndProjectId(Long userId) {
+        return this.saveUserInfoByProjectService.queryCurrentUserDownAllContractAndProjectId(userId);
+    }
+
+    @Override
+    public List<SaveUserInfoByProjectDTO> queryCurrentProjectContractAssignmentUserList(Long projectId, Long contractId) {
+        return this.saveUserInfoByProjectService.queryProjectBusinessUser(projectId, contractId);
+    }
+}

+ 3 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/feign/ProjectClientImpl.java

@@ -13,8 +13,9 @@ public class ProjectClientImpl implements ProjectClient {
 
     private final IProjectInfoService projectInfoService;
 
+
     @Override
-    public List<ProjectInfo> queryProjectList() {
-        return projectInfoService.selectProjectList();
+    public List<ProjectInfo> queryProjectList(List<String> projectIds) {
+        return projectInfoService.selectProjectList(projectIds);
     }
 }

+ 2 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ProjectInfoMapper.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.manager.mapper;
 
+import io.lettuce.core.dynamic.annotation.Param;
 import org.springblade.manager.entity.ProjectInfo;
 import org.springblade.manager.vo.ProjectInfoVO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -30,7 +31,7 @@ import java.util.List;
  */
 public interface ProjectInfoMapper extends BaseMapper<ProjectInfo> {
 
-	List<ProjectInfo> selectProjectList();
+	List<ProjectInfo> selectProjectList(@Param("projectIds") List<String> projectIds);
 
 	/**
 	 * 自定义分页

+ 4 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/ProjectInfoMapper.xml

@@ -33,7 +33,10 @@
     </resultMap>
 
     <select id="selectProjectList" resultMap="projectInfoResultMap">
-        select id, project_name, project_alias, project_number from m_project_info where is_deleted = 0;
+        select id, project_name, project_alias, project_number from m_project_info where is_deleted = 0 and id in
+        <foreach collection="projectIds" item="projectId" open="(" separator="," close=")">
+            #{projectId}
+        </foreach>
     </select>
 
     <update id="updateTemplateIdById">

+ 7 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/SaveUserInfoByProjectMapper.java

@@ -1,8 +1,15 @@
 package org.springblade.manager.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import io.lettuce.core.dynamic.annotation.Param;
 import org.springblade.manager.dto.SaveUserInfoByProjectDTO;
 
+import java.util.List;
+
 public interface SaveUserInfoByProjectMapper extends BaseMapper<SaveUserInfoByProjectDTO> {
 
+    List<SaveUserInfoByProjectDTO> queryCurrentUserDownAllContractAndProjectId(@Param("userid") Long userId);
+
+    List<SaveUserInfoByProjectDTO> queryProjectBusinessUser(@Param("projectId") Long projectId,@Param("contractId") Long contractId);
+
 }

+ 8 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/SaveUserInfoByProjectMapper.xml

@@ -20,4 +20,12 @@
         <result column="is_deleted" property="isDeleted"/>
     </resultMap>
 
+    <select id="queryCurrentUserDownAllContractAndProjectId" resultMap="contractInfoResultMap">
+        select project_id, contract_id from m_project_assignment_user where is_deleted = 0 and user_id = #{userId}
+    </select>
+
+    <select id="queryProjectBusinessUser" resultMap="contractInfoResultMap">
+        select * from m_project_assignment_user where is_deleted = 0 and project_id = #{projectId} and contract_id is NULL
+    </select>
+
 </mapper>

+ 1 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IProjectInfoService.java

@@ -36,7 +36,7 @@ public interface IProjectInfoService extends BaseService<ProjectInfo> {
 	 * 客户端首页获取项目列表
 	 * @return 结果集
 	 */
-	List<ProjectInfo> selectProjectList();
+	List<ProjectInfo> selectProjectList(List<String> projectIds);
 
 	/**
 	 * 自定义分页

+ 7 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/SaveUserInfoByProjectService.java

@@ -3,6 +3,13 @@ package org.springblade.manager.service;
 import org.springblade.core.mp.base.BaseService;
 import org.springblade.manager.dto.SaveUserInfoByProjectDTO;
 
+import java.util.List;
+
 
 public interface SaveUserInfoByProjectService extends BaseService<SaveUserInfoByProjectDTO> {
+
+    List<SaveUserInfoByProjectDTO> queryCurrentUserDownAllContractAndProjectId(Long userId);
+
+    List<SaveUserInfoByProjectDTO> queryProjectBusinessUser(Long projectId, Long contractId);
+
 }

+ 2 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ProjectInfoServiceImpl.java

@@ -42,8 +42,8 @@ public class ProjectInfoServiceImpl extends BaseServiceImpl<ProjectInfoMapper, P
 	private ContractInfoMapper contractInfoMapper;
 
 	@Override
-	public List<ProjectInfo> selectProjectList() {
-		return this.baseMapper.selectProjectList();
+	public List<ProjectInfo> selectProjectList(List<String> projectIds) {
+		return this.baseMapper.selectProjectList(projectIds);
 	}
 
 	@Override

+ 12 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/SaveUserInfoByProjectServiceImpl.java

@@ -6,9 +6,21 @@ import org.springblade.manager.mapper.SaveUserInfoByProjectMapper;
 import org.springblade.manager.service.SaveUserInfoByProjectService;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 
 @Service
 public class SaveUserInfoByProjectServiceImpl
         extends BaseServiceImpl<SaveUserInfoByProjectMapper, SaveUserInfoByProjectDTO>
         implements SaveUserInfoByProjectService {
+
+    @Override
+    public List<SaveUserInfoByProjectDTO> queryCurrentUserDownAllContractAndProjectId(Long userId) {
+        return this.baseMapper.queryCurrentUserDownAllContractAndProjectId(userId);
+    }
+
+    @Override
+    public List<SaveUserInfoByProjectDTO> queryProjectBusinessUser(Long projectId, Long contractId) {
+        return this.baseMapper.queryProjectBusinessUser(projectId, contractId);
+    }
 }