|
@@ -1,12 +1,15 @@
|
|
|
package org.dromara.customer.service.impl;
|
|
package org.dromara.customer.service.impl;
|
|
|
|
|
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
|
|
+import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
import lombok.RequiredArgsConstructor;
|
|
|
|
|
+import org.apache.dubbo.config.annotation.DubboReference;
|
|
|
import org.dromara.common.mybatis.core.page.PageQuery;
|
|
import org.dromara.common.mybatis.core.page.PageQuery;
|
|
|
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
|
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
|
|
import org.dromara.common.redis.utils.SequenceUtils;
|
|
import org.dromara.common.redis.utils.SequenceUtils;
|
|
@@ -15,8 +18,15 @@ import org.dromara.customer.domain.bo.SalesAnnualFinalizationBo;
|
|
|
import org.dromara.customer.domain.vo.SalesAnnualFinalizationVo;
|
|
import org.dromara.customer.domain.vo.SalesAnnualFinalizationVo;
|
|
|
import org.dromara.customer.mapper.SalesAnnualFinalizationMapper;
|
|
import org.dromara.customer.mapper.SalesAnnualFinalizationMapper;
|
|
|
import org.dromara.customer.service.IOperationLogService;
|
|
import org.dromara.customer.service.IOperationLogService;
|
|
|
|
|
+import org.dromara.customer.domain.bo.TeamMemberBo;
|
|
|
|
|
+import org.dromara.customer.service.ITeamMemberService;
|
|
|
import org.dromara.customer.service.ISalesAnnualFinalizationService;
|
|
import org.dromara.customer.service.ISalesAnnualFinalizationService;
|
|
|
|
|
+import org.dromara.customer.controller.constant.CustomerConstants;
|
|
|
|
|
+import org.dromara.system.api.RemoteUserService;
|
|
|
|
|
+import org.dromara.system.api.domain.vo.RemoteUserVo;
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
+
|
|
|
|
|
|
|
|
import java.time.Duration;
|
|
import java.time.Duration;
|
|
|
import java.util.Collection;
|
|
import java.util.Collection;
|
|
@@ -37,14 +47,17 @@ public class SalesAnnualFinalizationServiceImpl implements ISalesAnnualFinalizat
|
|
|
|
|
|
|
|
private final SalesAnnualFinalizationMapper baseMapper;
|
|
private final SalesAnnualFinalizationMapper baseMapper;
|
|
|
private final IOperationLogService operationLogService;
|
|
private final IOperationLogService operationLogService;
|
|
|
|
|
+ private final ITeamMemberService teamMemberService;
|
|
|
|
|
+
|
|
|
|
|
+ @DubboReference
|
|
|
|
|
+ private RemoteUserService remoteUserService;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 查询年度入围项目列表
|
|
* 查询年度入围项目列表
|
|
|
*/
|
|
*/
|
|
|
@Override
|
|
@Override
|
|
|
public TableDataInfo<SalesAnnualFinalizationVo> queryPageList(SalesAnnualFinalizationBo bo, PageQuery pageQuery) {
|
|
public TableDataInfo<SalesAnnualFinalizationVo> queryPageList(SalesAnnualFinalizationBo bo, PageQuery pageQuery) {
|
|
|
- LambdaQueryWrapper<SalesAnnualFinalization> lqw = buildQueryWrapper(bo);
|
|
|
|
|
- Page<SalesAnnualFinalizationVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
|
|
|
|
|
|
+ IPage<SalesAnnualFinalizationVo> result = baseMapper.selectSalesAnnualFinalizationList(pageQuery.build(), bo);
|
|
|
return TableDataInfo.build(result);
|
|
return TableDataInfo.build(result);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -53,8 +66,7 @@ public class SalesAnnualFinalizationServiceImpl implements ISalesAnnualFinalizat
|
|
|
*/
|
|
*/
|
|
|
@Override
|
|
@Override
|
|
|
public List<SalesAnnualFinalizationVo> queryList(SalesAnnualFinalizationBo bo) {
|
|
public List<SalesAnnualFinalizationVo> queryList(SalesAnnualFinalizationBo bo) {
|
|
|
- LambdaQueryWrapper<SalesAnnualFinalization> lqw = buildQueryWrapper(bo);
|
|
|
|
|
- return baseMapper.selectVoList(lqw);
|
|
|
|
|
|
|
+ return baseMapper.selectSalesAnnualFinalizationList(bo);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private LambdaQueryWrapper<SalesAnnualFinalization> buildQueryWrapper(SalesAnnualFinalizationBo bo) {
|
|
private LambdaQueryWrapper<SalesAnnualFinalization> buildQueryWrapper(SalesAnnualFinalizationBo bo) {
|
|
@@ -68,6 +80,7 @@ public class SalesAnnualFinalizationServiceImpl implements ISalesAnnualFinalizat
|
|
|
lqw.eq(bo.getProjectStatus() != null, SalesAnnualFinalization::getProjectStatus, bo.getProjectStatus());
|
|
lqw.eq(bo.getProjectStatus() != null, SalesAnnualFinalization::getProjectStatus, bo.getProjectStatus());
|
|
|
lqw.eq(bo.getProjectLevel() != null, SalesAnnualFinalization::getProjectLevel, bo.getProjectLevel());
|
|
lqw.eq(bo.getProjectLevel() != null, SalesAnnualFinalization::getProjectLevel, bo.getProjectLevel());
|
|
|
lqw.eq(bo.getBusinessType() != null, SalesAnnualFinalization::getBusinessType, bo.getBusinessType());
|
|
lqw.eq(bo.getBusinessType() != null, SalesAnnualFinalization::getBusinessType, bo.getBusinessType());
|
|
|
|
|
+ lqw.eq(bo.getFinalizationType() != null, SalesAnnualFinalization::getFinalizationType, bo.getFinalizationType());
|
|
|
lqw.eq(StrUtil.isNotBlank(bo.getProductSupport()), SalesAnnualFinalization::getProductSupport, bo.getProductSupport());
|
|
lqw.eq(StrUtil.isNotBlank(bo.getProductSupport()), SalesAnnualFinalization::getProductSupport, bo.getProductSupport());
|
|
|
return lqw;
|
|
return lqw;
|
|
|
}
|
|
}
|
|
@@ -85,30 +98,31 @@ public class SalesAnnualFinalizationServiceImpl implements ISalesAnnualFinalizat
|
|
|
*/
|
|
*/
|
|
|
@Override
|
|
@Override
|
|
|
public Boolean insertByBo(SalesAnnualFinalizationBo bo) {
|
|
public Boolean insertByBo(SalesAnnualFinalizationBo bo) {
|
|
|
|
|
+ autoFillDept(bo);
|
|
|
SalesAnnualFinalization add = BeanUtil.toBean(bo, SalesAnnualFinalization.class);
|
|
SalesAnnualFinalization add = BeanUtil.toBean(bo, SalesAnnualFinalization.class);
|
|
|
validEntityBeforeSave(add);
|
|
validEntityBeforeSave(add);
|
|
|
|
|
|
|
|
if (add.getProjectNo() == null || add.getProjectNo().isEmpty()) {
|
|
if (add.getProjectNo() == null || add.getProjectNo().isEmpty()) {
|
|
|
add.setProjectNo(SequenceUtils.nextPaddedIdStr(PROJECT_NO_KEY, Duration.ofDays(3650), 6));
|
|
add.setProjectNo(SequenceUtils.nextPaddedIdStr(PROJECT_NO_KEY, Duration.ofDays(3650), 6));
|
|
|
}
|
|
}
|
|
|
- // 恢复默认值赋值,因为当前连接的数据库仍然提示没有默认值
|
|
|
|
|
- if (add.getBiddingType() == null) {
|
|
|
|
|
- add.setBiddingType(1);
|
|
|
|
|
- }
|
|
|
|
|
- if (add.getProjectStatus() == null) {
|
|
|
|
|
- add.setProjectStatus(1);
|
|
|
|
|
- }
|
|
|
|
|
- if (add.getBidBondStatus() == null) {
|
|
|
|
|
- add.setBidBondStatus(0);
|
|
|
|
|
- }
|
|
|
|
|
- if (add.getIsNoticeAdvance() == null) {
|
|
|
|
|
- add.setIsNoticeAdvance(0);
|
|
|
|
|
- }
|
|
|
|
|
|
|
|
|
|
boolean flag = baseMapper.insert(add) > 0;
|
|
boolean flag = baseMapper.insert(add) > 0;
|
|
|
if (flag) {
|
|
if (flag) {
|
|
|
bo.setId(add.getId());
|
|
bo.setId(add.getId());
|
|
|
operationLogService.recordLog(2, String.valueOf(add.getId()), 1, null, "年度入围", add.getProjectName());
|
|
operationLogService.recordLog(2, String.valueOf(add.getId()), 1, null, "年度入围", add.getProjectName());
|
|
|
|
|
+
|
|
|
|
|
+ // 自动将负责人加入团队成员
|
|
|
|
|
+ if (add.getLeader() != null) {
|
|
|
|
|
+ TeamMemberBo memberBo = new TeamMemberBo();
|
|
|
|
|
+ memberBo.setDataType(2); // 年度入围
|
|
|
|
|
+ memberBo.setObjectNo(String.valueOf(add.getId()));
|
|
|
|
|
+ memberBo.setUserNo(add.getLeader());
|
|
|
|
|
+ memberBo.setRealName(add.getLeaderName());
|
|
|
|
|
+ memberBo.setRoleCode(CustomerConstants.TEAM_ROLE_LEADER);
|
|
|
|
|
+ memberBo.setUpdateAccredit(1);
|
|
|
|
|
+ memberBo.setIzManager(1);
|
|
|
|
|
+ teamMemberService.insertOrUpdateMember(memberBo);
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
return flag;
|
|
return flag;
|
|
|
}
|
|
}
|
|
@@ -118,6 +132,7 @@ public class SalesAnnualFinalizationServiceImpl implements ISalesAnnualFinalizat
|
|
|
*/
|
|
*/
|
|
|
@Override
|
|
@Override
|
|
|
public Boolean updateByBo(SalesAnnualFinalizationBo bo) {
|
|
public Boolean updateByBo(SalesAnnualFinalizationBo bo) {
|
|
|
|
|
+ autoFillDept(bo);
|
|
|
SalesAnnualFinalization oldData = baseMapper.selectById(bo.getId());
|
|
SalesAnnualFinalization oldData = baseMapper.selectById(bo.getId());
|
|
|
SalesAnnualFinalization update = BeanUtil.toBean(bo, SalesAnnualFinalization.class);
|
|
SalesAnnualFinalization update = BeanUtil.toBean(bo, SalesAnnualFinalization.class);
|
|
|
validEntityBeforeSave(update);
|
|
validEntityBeforeSave(update);
|
|
@@ -126,10 +141,37 @@ public class SalesAnnualFinalizationServiceImpl implements ISalesAnnualFinalizat
|
|
|
if (!ObjectUtil.equals(oldData.getProjectStatus(), bo.getProjectStatus())) {
|
|
if (!ObjectUtil.equals(oldData.getProjectStatus(), bo.getProjectStatus())) {
|
|
|
operationLogService.recordLog(2, String.valueOf(bo.getId()), 2, null, "项目状态", String.valueOf(bo.getProjectStatus()));
|
|
operationLogService.recordLog(2, String.valueOf(bo.getId()), 2, null, "项目状态", String.valueOf(bo.getProjectStatus()));
|
|
|
}
|
|
}
|
|
|
|
|
+ // 同步负责人到团队成员
|
|
|
|
|
+ if (update.getLeader() != null) {
|
|
|
|
|
+ TeamMemberBo memberBo = new TeamMemberBo();
|
|
|
|
|
+ memberBo.setDataType(2);
|
|
|
|
|
+ memberBo.setObjectNo(String.valueOf(update.getId()));
|
|
|
|
|
+ memberBo.setUserNo(update.getLeader());
|
|
|
|
|
+ memberBo.setRealName(update.getLeaderName());
|
|
|
|
|
+ memberBo.setRoleCode(CustomerConstants.TEAM_ROLE_LEADER);
|
|
|
|
|
+ memberBo.setUpdateAccredit(1);
|
|
|
|
|
+ memberBo.setIzManager(1);
|
|
|
|
|
+ teamMemberService.insertOrUpdateMember(memberBo);
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
return flag;
|
|
return flag;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 自动填充部门
|
|
|
|
|
+ */
|
|
|
|
|
+ private void autoFillDept(SalesAnnualFinalizationBo bo) {
|
|
|
|
|
+ if (StrUtil.isBlank(bo.getDeptNo()) && bo.getLeader() != null) {
|
|
|
|
|
+ List<RemoteUserVo> remoteUserVos = remoteUserService.selectListByIds(List.of(bo.getLeader()));
|
|
|
|
|
+ if (CollUtil.isNotEmpty(remoteUserVos)) {
|
|
|
|
|
+ RemoteUserVo userVo = remoteUserVos.get(0);
|
|
|
|
|
+ if (userVo.getDeptId() != null) {
|
|
|
|
|
+ bo.setDeptNo(String.valueOf(userVo.getDeptId()));
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 保存前校验
|
|
* 保存前校验
|
|
|
*/
|
|
*/
|
|
@@ -147,4 +189,67 @@ public class SalesAnnualFinalizationServiceImpl implements ISalesAnnualFinalizat
|
|
|
}
|
|
}
|
|
|
return baseMapper.deleteByIds(ids) > 0;
|
|
return baseMapper.deleteByIds(ids) > 0;
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 转移年度入围项目
|
|
|
|
|
+ */
|
|
|
|
|
+ @Override
|
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
|
|
+ public Boolean transfer(SalesAnnualFinalizationBo bo) {
|
|
|
|
|
+ List<Long> ids = bo.getIds();
|
|
|
|
|
+ if (ids == null || ids.isEmpty()) {
|
|
|
|
|
+ if (bo.getId() == null) return false;
|
|
|
|
|
+ ids = List.of(bo.getId());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ Long newLeaderId = bo.getNewLeaderId() != null ? bo.getNewLeaderId() : bo.getLeader();
|
|
|
|
|
+ if (newLeaderId == null) return false;
|
|
|
|
|
+
|
|
|
|
|
+ String leaderName = bo.getLeaderName();
|
|
|
|
|
+ if (StrUtil.isBlank(leaderName)) {
|
|
|
|
|
+ List<RemoteUserVo> users = remoteUserService.selectListByIds(List.of(newLeaderId));
|
|
|
|
|
+ if (CollUtil.isNotEmpty(users)) {
|
|
|
|
|
+ leaderName = users.get(0).getNickName();
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ boolean result = true;
|
|
|
|
|
+ for (Long id : ids) {
|
|
|
|
|
+ SalesAnnualFinalization oldData = baseMapper.selectById(id);
|
|
|
|
|
+ if (oldData == null) continue;
|
|
|
|
|
+
|
|
|
|
|
+ Long oldLeaderId = oldData.getLeader();
|
|
|
|
|
+
|
|
|
|
|
+ // 如果不保留原负责人,且原负责人与新负责人不同,则从团队中移除原负责人
|
|
|
|
|
+ if (Boolean.FALSE.equals(bo.getKeepAsMember()) && oldLeaderId != null && !oldLeaderId.equals(newLeaderId)) {
|
|
|
|
|
+ teamMemberService.removeMember(2, String.valueOf(id), oldLeaderId);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ SalesAnnualFinalization update = new SalesAnnualFinalization();
|
|
|
|
|
+ update.setId(id);
|
|
|
|
|
+ update.setLeader(newLeaderId);
|
|
|
|
|
+ update.setLeaderName(leaderName);
|
|
|
|
|
+ boolean success = baseMapper.updateById(update) > 0;
|
|
|
|
|
+ result = result && success;
|
|
|
|
|
+ if (success) {
|
|
|
|
|
+ // 同步新负责人到团队成员
|
|
|
|
|
+ TeamMemberBo memberBo = new TeamMemberBo();
|
|
|
|
|
+ memberBo.setDataType(2); // 年度入围
|
|
|
|
|
+ memberBo.setObjectNo(String.valueOf(id));
|
|
|
|
|
+ memberBo.setUserNo(newLeaderId);
|
|
|
|
|
+ memberBo.setRealName(leaderName);
|
|
|
|
|
+ memberBo.setRoleCode(CustomerConstants.TEAM_ROLE_LEADER);
|
|
|
|
|
+ memberBo.setUpdateAccredit(1);
|
|
|
|
|
+ memberBo.setIzManager(1);
|
|
|
|
|
+ teamMemberService.insertOrUpdateMember(memberBo);
|
|
|
|
|
+
|
|
|
|
|
+ // 记录日志
|
|
|
|
|
+ operationLogService.recordLog(2, String.valueOf(id), CustomerConstants.ACTION_TYPE_TRANSFER, null, "转移了年度入围项目", leaderName);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return result;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
}
|
|
}
|