|
@@ -1,5 +1,6 @@
|
|
|
package org.springblade.manager.controller;
|
|
|
|
|
|
+import cn.hutool.core.date.LocalDateTimeUtil;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import io.swagger.annotations.*;
|
|
@@ -13,7 +14,10 @@ import org.springblade.common.utils.SnowFlakeUtil;
|
|
|
import org.springblade.core.log.exception.ServiceException;
|
|
|
import org.springblade.core.mp.support.Condition;
|
|
|
import org.springblade.core.mp.support.Query;
|
|
|
+import org.springblade.core.secure.utils.SecureUtil;
|
|
|
import org.springblade.core.tool.api.R;
|
|
|
+import org.springblade.core.tool.utils.BeanUtil;
|
|
|
+import org.springblade.core.tool.utils.DateUtil;
|
|
|
import org.springblade.core.tool.utils.Func;
|
|
|
import org.springblade.core.tool.utils.ObjectUtil;
|
|
|
import org.springblade.manager.dto.FindAllUserByConditionDTO;
|
|
@@ -29,6 +33,8 @@ import org.springblade.system.user.entity.User;
|
|
|
import org.springblade.system.user.feign.IUserClient;
|
|
|
import org.springblade.system.user.vo.UserContractInfoVO;
|
|
|
import org.springblade.system.user.vo.UserVO2;
|
|
|
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
|
|
|
+import org.springframework.jdbc.core.JdbcTemplate;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
import org.springframework.web.bind.annotation.RequestParam;
|
|
@@ -38,7 +44,9 @@ import org.springblade.manager.service.IContractInfoService;
|
|
|
import org.springblade.core.boot.ctrl.BladeController;
|
|
|
|
|
|
|
|
|
+import java.time.LocalDateTime;
|
|
|
import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
@RestController
|
|
|
@AllArgsConstructor
|
|
@@ -51,6 +59,7 @@ public class ContractInfoController extends BladeController {
|
|
|
private final IUserClient iUserClient;
|
|
|
private final IWbsTreeContractService wbsTreeContractService;
|
|
|
private final SaveUserInfoByProjectMapper saveUserInfoByProjectMapper;
|
|
|
+ private final JdbcTemplate jdbcTemplate;
|
|
|
|
|
|
/**
|
|
|
* 详情
|
|
@@ -146,8 +155,7 @@ public class ContractInfoController extends BladeController {
|
|
|
@ApiOperationSupport(order = 6)
|
|
|
@ApiOperation(value = "新增或修改", notes = "传入contractInfo")
|
|
|
public R submit(@Valid @RequestBody ContractInfoVO contractInfo) {
|
|
|
- boolean b = contractInfoService.saveAndUpdateContract(contractInfo);
|
|
|
- if (b) {
|
|
|
+ if (contractInfoService.saveAndUpdateContract(contractInfo)) {
|
|
|
return R.data(contractInfo, "操作成功");
|
|
|
}
|
|
|
return R.fail("操作失败");
|
|
@@ -161,18 +169,13 @@ public class ContractInfoController extends BladeController {
|
|
|
@ApiOperationSupport(order = 7)
|
|
|
@ApiOperation(value = "逻辑删除", notes = "传入ids")
|
|
|
public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
|
|
|
- List<WbsTreeContract> wbsTreeContracts = wbsTreeContractService.findWbsTreeContract(ids);
|
|
|
- if (wbsTreeContracts.size() > 0) {
|
|
|
+ if (wbsTreeContractService.findWbsTreeContract(ids).size() > 0) {
|
|
|
return R.fail("合同段存在关联的WBS树,删除失败");
|
|
|
}
|
|
|
- Long list = saveUserInfoByProjectMapper.selectCount(Wrappers.<SaveUserInfoByProjectDTO>query().lambda()
|
|
|
- .eq(SaveUserInfoByProjectDTO::getContractId, ids)
|
|
|
- );
|
|
|
- if (list > 0L) {
|
|
|
+ if (saveUserInfoByProjectMapper.selectCount(Wrappers.<SaveUserInfoByProjectDTO>query().lambda().eq(SaveUserInfoByProjectDTO::getContractId, ids)) > 0L) {
|
|
|
return R.fail("当前合同段存在关联用户,删除失败");
|
|
|
}
|
|
|
- Integer list2 = saveUserInfoByProjectMapper.selectSGJL(ids);
|
|
|
- if (list2 > 0) {
|
|
|
+ if (saveUserInfoByProjectMapper.selectSGJL(ids) > 0) {
|
|
|
return R.fail("当前监理合同段存在关联的施工合同信息,删除失败");
|
|
|
}
|
|
|
return R.status(contractInfoService.deleteLogic(Func.toLongList(ids)));
|
|
@@ -223,7 +226,7 @@ public class ContractInfoController extends BladeController {
|
|
|
|
|
|
|
|
|
/**
|
|
|
- * 保存-项目分配维护人员
|
|
|
+ * 保存-项目分配维护人员 - 单保存
|
|
|
*/
|
|
|
@PostMapping("/save-userInfo-by-project")
|
|
|
@ApiOperationSupport(order = 12)
|
|
@@ -304,12 +307,11 @@ public class ContractInfoController extends BladeController {
|
|
|
|
|
|
|
|
|
/**
|
|
|
- * 保存-项目合同段分配人员
|
|
|
+ * 保存-项目合同段分配人员 - 单保存
|
|
|
*/
|
|
|
@PostMapping("/save-userInfo-by-project-tow")
|
|
|
@ApiOperationSupport(order = 13)
|
|
|
@ApiOperation(value = "保存-项目合同段分配人员", notes = "传入项目id、合同id、岗位处roleId、用户id")
|
|
|
- @Transactional(rollbackFor = Exception.class)
|
|
|
public R saveUserInfoByProjectTow(@RequestBody List<SaveUserInfoByProjectDTO> list) {
|
|
|
if (list.size() > 0) {
|
|
|
list.forEach((lists) -> {
|
|
@@ -324,18 +326,73 @@ public class ContractInfoController extends BladeController {
|
|
|
throw new ServiceException("当前用户类型已存在合同段,请重新选择项目合同段添加");
|
|
|
}
|
|
|
});
|
|
|
- //添加userRoleId
|
|
|
- iUserClient.updateUserRoleId(list);
|
|
|
- boolean result = saveUserInfoByProjectService.saveBatch(list);
|
|
|
- if (result) {
|
|
|
- return R.success("保存成功");
|
|
|
+
|
|
|
+ String contractId = list.stream().map(SaveUserInfoByProjectDTO::getContractId).findAny().orElse(null);
|
|
|
+ ContractInfo contractInfo = contractInfoService.selectById(contractId);
|
|
|
+ //监理、业主、中西试验室合同段新增
|
|
|
+ if (contractInfo.getContractType() == 2 || contractInfo.getContractType() == 3 || contractInfo.getContractType() == 4) {
|
|
|
+ //同步到对应关联的施工合同段中
|
|
|
+ String sql = "select * from m_contract_relation_jlyz where contract_id_jlyz = " + contractInfo.getId();
|
|
|
+ List<String> record_SG = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(ContractRelationJlyz.class)).stream().map(ContractRelationJlyz::getContractIdSg).collect(Collectors.toList()).stream().map(String::valueOf).collect(Collectors.toList());
|
|
|
+ if (record_SG.size() > 0) {
|
|
|
+ for (String sgId : record_SG) {
|
|
|
+ //当前施工合同段所有用户角色信息
|
|
|
+ String sql2 = "select * from m_project_assignment_user where contract_id = " + sgId + " and post_id is null and status = 1 and is_deleted = 0";
|
|
|
+ List<SaveUserInfoByProjectDTO> userRoleInfoSG = jdbcTemplate.query(sql2, new BeanPropertyRowMapper<>(SaveUserInfoByProjectDTO.class));
|
|
|
+
|
|
|
+ //去重
|
|
|
+ List<SaveUserInfoByProjectDTO> lists = BeanUtil.copyProperties(list, SaveUserInfoByProjectDTO.class);
|
|
|
+ if (lists.size() > 0) {
|
|
|
+ Iterator<SaveUserInfoByProjectDTO> iterator = lists.iterator();
|
|
|
+ while (iterator.hasNext()) {
|
|
|
+ SaveUserInfoByProjectDTO jl = iterator.next();
|
|
|
+ for (SaveUserInfoByProjectDTO sg : userRoleInfoSG) {
|
|
|
+ if (sg.getUserId().equals(jl.getUserId())) {
|
|
|
+ //如果监理合同段与施工合同段中有相同的用户信息,就移除,一个用户只能存在一个合同段中
|
|
|
+ iterator.remove();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //重构入参
|
|
|
+ List<SaveUserInfoByProjectDTO> addList = new ArrayList<>();
|
|
|
+ for (SaveUserInfoByProjectDTO jl : lists) {
|
|
|
+ SaveUserInfoByProjectDTO newObj = BeanUtil.copyProperties(jl, SaveUserInfoByProjectDTO.class);
|
|
|
+ assert newObj != null;
|
|
|
+ newObj.setId(SnowFlakeUtil.getId());
|
|
|
+ newObj.setContractId(sgId);
|
|
|
+ newObj.setStatus(1);
|
|
|
+ if (ObjectUtil.isNotEmpty(SecureUtil.getUser())) {
|
|
|
+ newObj.setCreateUser(SecureUtil.getUser().getUserId());
|
|
|
+ newObj.setCreateDept(Long.parseLong(SecureUtil.getUser().getDeptId().split(",")[0]));
|
|
|
+ }
|
|
|
+ newObj.setCreateTime(new Date());
|
|
|
+ newObj.setIsRecordJlId(contractInfo.getId()); //从监理合同段关联的数据,用于删除关联时同步删除用户信息
|
|
|
+ addList.add(newObj);
|
|
|
+ }
|
|
|
+
|
|
|
+ //保存监理数据时,同步到对应关联的施工合同段中去
|
|
|
+ if (addList.size() > 0) {
|
|
|
+ saveUserInfoByProjectService.saveBatch(addList);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
+ //保存当前合同段数据
|
|
|
+ saveUserInfoByProjectService.saveBatch(list);
|
|
|
+
|
|
|
+ //更新用户roleId
|
|
|
+ iUserClient.updateUserRoleId(list);
|
|
|
+
|
|
|
+ return R.success("保存成功");
|
|
|
}
|
|
|
return R.fail("保存失败");
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 项目分配用户删除
|
|
|
+ * 项目分配用户删除 - 全部删除 or 单删除
|
|
|
*/
|
|
|
@PostMapping("/remove-users-by-ids")
|
|
|
@ApiOperationSupport(order = 14)
|
|
@@ -348,32 +405,80 @@ public class ContractInfoController extends BladeController {
|
|
|
//查询当前角色信息是否存在
|
|
|
List<Long> idsListTemp = Func.toLongList(ids);
|
|
|
String roleIdTemp = "";
|
|
|
+ String contractId = "";
|
|
|
for (Long idTemp : idsListTemp) {
|
|
|
SaveUserInfoByProjectDTO saveUserInfoByProjectDTO = saveUserInfoByProjectMapper.selectOne(Wrappers.<SaveUserInfoByProjectDTO>query().lambda().eq(SaveUserInfoByProjectDTO::getId, idTemp));
|
|
|
roleIdTemp = saveUserInfoByProjectDTO.getRoleId();
|
|
|
+ contractId = saveUserInfoByProjectDTO.getContractId();
|
|
|
}
|
|
|
if (StringUtils.isEmpty(roleIdTemp)) {
|
|
|
- //roleId = null 表示为运营维护人员角色分配 - 物理删除
|
|
|
+ //roleId = null 表示为运营维护人员角色分配
|
|
|
return R.status(saveUserInfoByProjectService.deleteByIdsPhysical(idsListTemp));
|
|
|
} else {
|
|
|
//roleId != null 表示合同段人员角色分配
|
|
|
- if (idsListTemp.size() > 1) {
|
|
|
- //全部删除
|
|
|
- return R.status(saveUserInfoByProjectService.deleteBatchByIdsList(idsListTemp));
|
|
|
- } else {
|
|
|
- //单删除
|
|
|
+ ContractInfo contractInfo = contractInfoService.selectById(contractId);
|
|
|
+
|
|
|
+ if (idsListTemp.size() > 1) { //全部删除
|
|
|
+ if (contractInfo.getContractType() == 2 || contractInfo.getContractType() == 3 || contractInfo.getContractType() == 4) {
|
|
|
+ //监理合同段同步删除施工合同段下的用户信息
|
|
|
+ String sql = "select * from m_contract_relation_jlyz where contract_id_jlyz = " + contractInfo.getId();
|
|
|
+ List<String> record_SG = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(ContractRelationJlyz.class)).stream().map(ContractRelationJlyz::getContractIdSg).collect(Collectors.toList()).stream().map(String::valueOf).collect(Collectors.toList());
|
|
|
+ for (String sgId : record_SG) {
|
|
|
+ //同步删除当前施工合同段下所有关联用户 is_record_jl_id = contractInfo.getId()
|
|
|
+ String del = "delete from m_project_assignment_user where is_record_jl_id = " + contractInfo.getId() + " and contract_id = " + sgId;
|
|
|
+ jdbcTemplate.execute(del);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //更新每一个user的roleId字段
|
|
|
+ List<SaveUserInfoByProjectDTO> list = saveUserInfoByProjectMapper.selectList(Wrappers.<SaveUserInfoByProjectDTO>query().lambda().in(SaveUserInfoByProjectDTO::getId, idsListTemp));
|
|
|
+ List<String> userIds = list.stream().map(SaveUserInfoByProjectDTO::getUserId).distinct().collect(Collectors.toList());
|
|
|
+
|
|
|
+ saveUserInfoByProjectService.deleteByIdsPhysical(idsListTemp);
|
|
|
+
|
|
|
+ for (String userId : userIds) {
|
|
|
+ //物理删除后,再根据userId查询当前用户中的最新角色信息
|
|
|
+ String sql = "select role_id from m_project_assignment_user where role_id is not null and post_id is null and user_id = " + userId;
|
|
|
+ List<SaveUserInfoByProjectDTO> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(SaveUserInfoByProjectDTO.class));
|
|
|
+
|
|
|
+ List<String> collect = query.stream().map(SaveUserInfoByProjectDTO::getRoleId).distinct().collect(Collectors.toList()).stream().sorted().collect(Collectors.toList());
|
|
|
+
|
|
|
+ if (collect.size() > 0) {
|
|
|
+ String roleIds = org.apache.commons.lang.StringUtils.join(collect, ",");
|
|
|
+ String updateSql = "update blade_user set role_id = '" + roleIds + "' where id = " + userId;
|
|
|
+ jdbcTemplate.execute(updateSql);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ } else { //单删除
|
|
|
SaveUserInfoByProjectDTO saveUserInfoByProjectDTO = saveUserInfoByProjectMapper.selectById(ids);
|
|
|
String userId = saveUserInfoByProjectDTO.getUserId();
|
|
|
String roleId = saveUserInfoByProjectDTO.getRoleId();
|
|
|
- //删除用户RoleId
|
|
|
+
|
|
|
+ if (contractInfo.getContractType() == 2 || contractInfo.getContractType() == 3 || contractInfo.getContractType() == 4) {
|
|
|
+ //监理合同段同步删除施工合同段下的用户信息
|
|
|
+ String sql = "select * from m_contract_relation_jlyz where contract_id_jlyz = " + contractInfo.getId();
|
|
|
+ List<String> record_SG = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(ContractRelationJlyz.class)).stream().map(ContractRelationJlyz::getContractIdSg).collect(Collectors.toList()).stream().map(String::valueOf).collect(Collectors.toList());
|
|
|
+ for (String sgId : record_SG) {
|
|
|
+ //同步删除当前用户
|
|
|
+ String del = "delete from m_project_assignment_user where is_record_jl_id = " + contractInfo.getId() + " and contract_id = " + sgId + " and project_id = " + contractInfo.getPId() + " and user_id = " + userId + " and role_id = " + roleId;
|
|
|
+ jdbcTemplate.execute(del);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //物理删除
|
|
|
+ saveUserInfoByProjectService.deleteByIdsPhysical(idsListTemp);
|
|
|
+
|
|
|
+ //更新当前用户roleId
|
|
|
iUserClient.updateUserRoleIdTwo(userId, roleId);
|
|
|
- return R.status(saveUserInfoByProjectService.deleteByIdsPhysical(idsListTemp));
|
|
|
+
|
|
|
}
|
|
|
+ return R.status(true);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 项目分配用户逻辑删除当前项目下所有合同段角色信息
|
|
|
+ * 项目分配用户 - 删除当前项目下该用户的所有合同段角色信息
|
|
|
*/
|
|
|
@PostMapping("/remove-userProjectInfo-role-byId")
|
|
|
@ApiOperationSupport(order = 14)
|
|
@@ -467,7 +572,7 @@ public class ContractInfoController extends BladeController {
|
|
|
*/
|
|
|
@GetMapping("/trial/relation/tree")
|
|
|
@ApiOperationSupport(order = 18)
|
|
|
- @ApiOperation(value = "查询合同段私有Wbs节点树形结构", notes = "传入wbsId,项目id,合同段id")
|
|
|
+ @ApiOperation(value = "查询合同段私有Wbs节点树形结构", notes = "传入wbsId,项目id,合同段id,自检记录id")
|
|
|
@ApiImplicitParams(value = {
|
|
|
@ApiImplicitParam(name = "wbsId", value = "wbsId", required = true),
|
|
|
@ApiImplicitParam(name = "项目id", value = "projectId", required = true),
|