This commit is contained in:
mx 2024-11-01 09:04:31 +08:00
parent 3b21dd9a41
commit a8880c12cf
29 changed files with 378 additions and 67 deletions

View File

@ -129,7 +129,7 @@ public class PsTaskController extends BaseController {
@SaCheckPermission("business:task:list")
@GetMapping("/childFinish")
@RepeatSubmit()
public R<Void> childFinish(@NotNull Long id,String desc) {
public R<Void> childFinish(@NotNull Long id, String desc) {
psTaskMainService.finishChild(id, desc);
return R.ok();
}
@ -155,7 +155,7 @@ public class PsTaskController extends BaseController {
@PostMapping("/reset")
@RepeatSubmit()
public R<Void> taskReset(@Validated @RequestBody ResetAppointBo appointBo) {
psTaskMainService.taskReset(appointBo.getId(), appointBo.getExecutorId());
psTaskMainService.taskReset(appointBo.getId(), appointBo.getAppointType(), appointBo.getExecutorId());
return R.ok();
}

View File

@ -14,6 +14,11 @@ public class ResetAppointBo {
*/
@NotNull
private Long id;
/**
* 任务委派类型1内勤,2外勤,3特勤
*/
private String appointType;
/**
* 执行者用户id
*/

View File

@ -1,5 +1,6 @@
package com.pusong.business.enums;
import com.pusong.system.MenuEnum;
import lombok.AllArgsConstructor;
import lombok.Getter;
@ -9,17 +10,18 @@ import lombok.Getter;
@Getter
@AllArgsConstructor
public enum ApproverTypeEnum {
UPDATE("update","修改合同审批"),
CANCELLA("cancellation","作废合同审批"),
PAY("pay","合同回款审批"),
SIGN("sign","合同签章审批"),
ROLBACK("rolback","回传合同审批"),
TASKFINISH("taskFinish","任务完成审批"),
PUBLIC("public","公海认领审批"),
TASKCANCE("taskcance","任务作废审批"),
RETURN("RETURN","退款审批"),
FREE("free","免费工单审批"),
STOPACCOUNT("stopAccount","停止代账");
UPDATE("update","修改合同审批", MenuEnum.updateContract),
CANCELLA("cancellation","作废合同审批", MenuEnum.zuofei),
PAY("pay","合同回款审批", MenuEnum.pay),
SIGN("sign","合同签章审批", MenuEnum.sign),
ROLBACK("rolback","回传合同审批", MenuEnum.rollpdf),
TASKFINISH("taskFinish","任务完成审批", MenuEnum.taskFinish),
PUBLIC("public","公海认领审批", MenuEnum.gonghai),
TASKCANCE("taskcance","任务作废审批", MenuEnum.zuofei),
RETURN("RETURN","退款审批", MenuEnum.returnPay),
FREE("free","免费工单审批", MenuEnum.freeTask),
STOPACCOUNT("stopAccount","停止代账", MenuEnum.stopAcc);
private String code;
private String text;
private MenuEnum menuEnum;
}

View File

@ -24,10 +24,10 @@ import java.util.List;
public interface PsCompanyInfoMapper extends BaseMapperPlus<PsCompanyInfo, PsCompanyInfoVo> {
Page<PsCompanyInfoVo> selectPageList(@Param("page") Page<PsApproverRecord> page, @Param(Constants.WRAPPER) Wrapper<PsCompanyInfo> queryWrapper);
@DataPermission({
// @DataColumn(key = "deptName", value = "appo.create_dept"),
@DataColumn(key = "userName", value = "usr.user_id")
})
// @DataPermission({
//// @DataColumn(key = "deptName", value = "appo.create_dept"),
// @DataColumn(key = "userName", value = "fsu.user_id")
// })
Page<PsCompanyInfoVo> selectPageList2(@Param("page") Page<PsApproverRecord> page, @Param(Constants.WRAPPER) Wrapper<PsCompanyInfo> queryWrapper);
List<PsCompanyInfoVo> selectServiceCompanyList(@Param(Constants.WRAPPER) Wrapper<PsCompanyInfoVo> queryWrapper);

View File

@ -125,7 +125,7 @@ public interface IPsTaskService {
* @param id 任务委派表id
* @param executorId 任务新的执行者id
*/
void taskReset(Long id, List<Long> executorId);
void taskReset(Long id, String appointType, List<Long> executorId);
/**
* 免费工单任务作废
* @param id 任务主表id

View File

@ -19,10 +19,14 @@ import com.pusong.business.mapper.PsContractPayMapper;
import com.pusong.business.service.IPsCompanyInfoService;
import com.pusong.business.service.approver.ApproverContainer;
import com.pusong.business.service.approver.ApproverService;
import com.pusong.common.core.domain.model.LoginUser;
import com.pusong.common.core.exception.ServiceException;
import com.pusong.common.core.utils.DateUtils;
import com.pusong.common.core.utils.StringUtils;
import com.pusong.common.mybatis.core.page.PageQuery;
import com.pusong.common.satoken.utils.LoginHelper;
import com.pusong.system.domain.bo.SysNoticeBo;
import com.pusong.system.service.ISysNoticeService;
import jakarta.annotation.PostConstruct;
import jakarta.annotation.Resource;
@ -47,6 +51,8 @@ public abstract class ApproverAbstractServiceImpl implements ApproverService {
private PsContractPayMapper baseMapper;
@Resource
private IPsCompanyInfoService companyInfoService;
@Resource
private ISysNoticeService noticeService;
/**
* 通用申请方法
* @param bussinessId
@ -58,7 +64,7 @@ public abstract class ApproverAbstractServiceImpl implements ApproverService {
LambdaQueryWrapper<PsApproverRecord> wq = Wrappers.<PsApproverRecord>lambdaQuery().eq(PsApproverRecord::getDelFlag, "0")
.eq(PsApproverRecord::getBusinessType, approverType())
.eq(PsApproverRecord::getApproverStatus, ApproverStatusEnum.INIT.getCode());
if(StringUtils.equals(approverType(), ApproverTypeEnum.RETURN.getCode()) || StringUtils.equals(approverType(), ApproverTypeEnum.PAY.getCode())){
if(StringUtils.equals(approverType().getCode(), ApproverTypeEnum.RETURN.getCode()) || StringUtils.equals(approverType().getCode(), ApproverTypeEnum.PAY.getCode())){
wq.eq(PsApproverRecord::getContractCode,contractCode);
}else{
wq.eq(PsApproverRecord::getBusinessId,bussinessId);
@ -71,19 +77,22 @@ public abstract class ApproverAbstractServiceImpl implements ApproverService {
PsApproverRecord record = new PsApproverRecord();
record.setBusinessId(bussinessId);
record.setContractCode(contractCode);
record.setBusinessType(approverType());
record.setBusinessType(approverType().getCode());
record.setApplyDesc(desc);
record.setUpdateData(updateData);
record.setApplyDate(new Date());
record.setApproverStatus(ApproverStatusEnum.INIT.getCode());
approverRecordMapper.insert(record);
LoginUser loginUser = LoginHelper.getLoginUser();
noticeService.sendNotice(SysNoticeBo.getWaitApplyInstance(loginUser.getNickname(), approverType().getMenuEnum()));
}
protected abstract String approverType();
protected abstract ApproverTypeEnum approverType();
@PostConstruct
public void register() {
approverContainer.registerService(approverType(), this);
approverContainer.registerService(approverType().getCode(), this);
}
/**

View File

@ -30,8 +30,8 @@ import java.util.List;
@Slf4j
public class CancellaApproverServiceImpl extends ApproverAbstractServiceImpl {
@Override
public String approverType() {
return ApproverTypeEnum.CANCELLA.getCode();
public ApproverTypeEnum approverType() {
return ApproverTypeEnum.CANCELLA;
}
private final IPsContractInfoService contractInfoService;
private final PsTaskMainMapper taskMainMapper;

View File

@ -41,8 +41,8 @@ import java.util.List;
@Slf4j
public class FreeApproverServiceImpl extends ApproverAbstractServiceImpl {
@Override
public String approverType() {
return ApproverTypeEnum.FREE.getCode();
public ApproverTypeEnum approverType() {
return ApproverTypeEnum.FREE;
}
private final PsTaskMainMapper taskMainMapper;
private final PsTaskAppointMapper taskAppointMapper;
@ -90,7 +90,8 @@ public class FreeApproverServiceImpl extends ApproverAbstractServiceImpl {
@Override
public void fail(PsApproverRecord psApproverRecord) {
PsCompanyInfoVo psCompanyInfoVo = companyInfoService.queryById(Long.valueOf(psApproverRecord.getBusinessId()));
// noticeService.sendNotice(SysNoticeBo.getFreeTaskErrorInstance(psCompanyInfoVo.getCompanyName()));
noticeService.sendNotice(SysNoticeBo.getFreeTaskErrorToUidInstance(psApproverRecord.getCreateBy(), psCompanyInfoVo.getCompanyName(), psApproverRecord.getApproverDesc()));
noticeService.sendNotice(SysNoticeBo.getFreeTaskErrorToRoleInstance(psCompanyInfoVo.getCompanyName(), psApproverRecord.getApproverDesc()));
}
/**

View File

@ -33,8 +33,8 @@ public class PayContractApproverServiceImpl extends ApproverAbstractServiceImpl
private final IPsTaskService taskMainService;
private final ISysNoticeService noticeService;
@Override
public String approverType() {
return ApproverTypeEnum.PAY.getCode();
public ApproverTypeEnum approverType() {
return ApproverTypeEnum.PAY;
}
@ -87,6 +87,8 @@ public class PayContractApproverServiceImpl extends ApproverAbstractServiceImpl
psTaskMain.setCustomId(info.getCustomId());
psTaskMain.setServiceCompanyId(psCompanyInfoVo.getId());
psTaskMainList.add(psTaskMain);
noticeService.sendNotice(SysNoticeBo.getNewTaskInstance(psCompanyInfoVo.getCompanyName()));
}
taskMainService.insertBatch(psTaskMainList);
}

View File

@ -42,8 +42,8 @@ import java.util.stream.Collectors;
@Slf4j
public class PublicApproverServiceImpl extends ApproverAbstractServiceImpl {
@Override
public String approverType() {
return ApproverTypeEnum.PUBLIC.getCode();
public ApproverTypeEnum approverType() {
return ApproverTypeEnum.PUBLIC;
}
private final PsCustomInfoMapper customInfoMapper;
@Resource

View File

@ -44,8 +44,8 @@ public class ReturnApproverServiceImpl extends ApproverAbstractServiceImpl {
@Resource
private PsApproverRecordMapper recordMapper;
@Override
public String approverType() {
return ApproverTypeEnum.RETURN.getCode();
public ApproverTypeEnum approverType() {
return ApproverTypeEnum.RETURN;
}
private final PsContractPayMapper baseMapper;

View File

@ -29,8 +29,8 @@ import java.util.List;
@Slf4j
public class RolbackApproverServiceImpl extends ApproverAbstractServiceImpl {
@Override
public String approverType() {
return ApproverTypeEnum.ROLBACK.getCode();
public ApproverTypeEnum approverType() {
return ApproverTypeEnum.ROLBACK;
}
private final IPsContractBusinessService businessService;
private final IPsContractInfoService contractInfoService;

View File

@ -31,8 +31,8 @@ import java.util.List;
@Slf4j
public class SignApproverServiceImpl extends ApproverAbstractServiceImpl {
@Override
public String approverType() {
return ApproverTypeEnum.SIGN.getCode();
public ApproverTypeEnum approverType() {
return ApproverTypeEnum.SIGN;
}
private final IPsContractBusinessService businessService;
private final ISysNoticeService noticeService;

View File

@ -22,6 +22,8 @@ import com.pusong.business.service.IPsContractInfoService;
import com.pusong.common.core.utils.DateUtils;
import com.pusong.common.core.utils.StringUtils;
import com.pusong.common.mybatis.core.page.PageQuery;
import com.pusong.system.domain.bo.SysNoticeBo;
import com.pusong.system.service.ISysNoticeService;
import jakarta.annotation.Resource;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -38,8 +40,8 @@ import java.util.List;
@Slf4j
public class StopAccountServiceImpl extends ApproverAbstractServiceImpl {
@Override
public String approverType() {
return ApproverTypeEnum.STOPACCOUNT.getCode();
public ApproverTypeEnum approverType() {
return ApproverTypeEnum.STOPACCOUNT;
}
private final PsTaskMainMapper taskMainMapper;
private final PsTaskAppointMapper taskAppointMapper;
@ -49,12 +51,17 @@ public class StopAccountServiceImpl extends ApproverAbstractServiceImpl {
private PsApproverRecordMapper recordMapper;
private final IPsCompanyInfoService psCompanyInfoService;
private final ISysNoticeService noticeService;
@Override
public void success(PsApproverRecord psApproverRecord) {
if (ApproverStepEnum.INIT.getCode().equals(psApproverRecord.getUpdateData())){
//转给总裁
psApproverRecord.setUpdateData(ApproverStepEnum.CW_APPLY.getCode());
psApproverRecord.setApproverStatus(ApproverStatusEnum.INIT.getCode());
PsCompanyInfoVo psCompanyInfoVo = psCompanyInfoService.queryById(Long.valueOf(psApproverRecord.getBusinessId()));
noticeService.sendNotice(SysNoticeBo.getStopAccount1Instance(psApproverRecord.getCreateBy(), psCompanyInfoVo.getCompanyName()));
return;
}
if (ApproverStepEnum.CW_APPLY.getCode().equals(psApproverRecord.getUpdateData())){
@ -64,6 +71,9 @@ public class StopAccountServiceImpl extends ApproverAbstractServiceImpl {
bo.setId(Long.valueOf(psApproverRecord.getBusinessId()));
bo.setServiceStatus(0);
psCompanyInfoService.update(bo);
PsCompanyInfoVo psCompanyInfoVo = psCompanyInfoService.queryById(Long.valueOf(psApproverRecord.getBusinessId()));
noticeService.sendNotice(SysNoticeBo.getStopAccount2Instance(psApproverRecord.getCreateBy(), psCompanyInfoVo.getCompanyName()));
}
}
@ -73,7 +83,8 @@ public class StopAccountServiceImpl extends ApproverAbstractServiceImpl {
*/
@Override
public void fail(PsApproverRecord psApproverRecord) {
PsCompanyInfoVo psCompanyInfoVo = psCompanyInfoService.queryById(Long.valueOf(psApproverRecord.getBusinessId()));
noticeService.sendNotice(SysNoticeBo.getStopAccountErrorInstance(psApproverRecord.getCreateBy(), psCompanyInfoVo.getCompanyName(), psApproverRecord.getApproverDesc()));
}
@Override

View File

@ -29,8 +29,8 @@ import java.util.List;
@Slf4j
public class TaskCancellaApproverServiceImpl extends ApproverAbstractServiceImpl {
@Override
public String approverType() {
return ApproverTypeEnum.TASKCANCE.getCode();
public ApproverTypeEnum approverType() {
return ApproverTypeEnum.TASKCANCE;
}
private final PsTaskMainMapper taskMainMapper;
private final PsTaskAppointMapper taskAppointMapper;

View File

@ -26,8 +26,8 @@ import java.util.Date;
@Slf4j
public class TaskFinishApproverServiceImpl extends ApproverAbstractServiceImpl {
@Override
public String approverType() {
return ApproverTypeEnum.TASKFINISH.getCode();
public ApproverTypeEnum approverType() {
return ApproverTypeEnum.TASKFINISH;
}
private final PsTaskAppointMapper taskAppointMapper;

View File

@ -28,8 +28,8 @@ import org.springframework.stereotype.Service;
@Slf4j
public class UpdateContractApproverServiceImpl extends ApproverAbstractServiceImpl {
@Override
public String approverType() {
return ApproverTypeEnum.UPDATE.getCode();
public ApproverTypeEnum approverType() {
return ApproverTypeEnum.UPDATE;
}
private final IPsContractBusinessService businessService;
private final IPsContractInfoService contractInfoService;

View File

@ -18,15 +18,22 @@ import com.pusong.business.mapper.*;
import com.pusong.business.service.IPsCompanyInfoService;
import com.pusong.business.service.approver.ApproverContainer;
import com.pusong.business.service.approver.ApproverService;
import com.pusong.common.core.domain.dto.RoleDTO;
import com.pusong.common.core.domain.model.LoginUser;
import com.pusong.common.core.exception.ServiceException;
import com.pusong.common.core.utils.DateUtils;
import com.pusong.common.core.utils.MapstructUtils;
import com.pusong.common.core.utils.StringUtils;
import com.pusong.common.mybatis.core.page.PageQuery;
import com.pusong.common.mybatis.core.page.TableDataInfo;
import com.pusong.common.mybatis.enums.DataScopeType;
import com.pusong.common.mybatis.helper.DataPermissionHelper;
import com.pusong.common.satoken.utils.LoginHelper;
import com.pusong.system.domain.SysUser;
import com.pusong.system.domain.bo.SysNoticeBo;
import com.pusong.system.domain.vo.SysUserVo;
import com.pusong.system.mapper.SysUserMapper;
import com.pusong.system.service.ISysNoticeService;
import jakarta.annotation.Resource;
import lombok.RequiredArgsConstructor;
import org.slf4j.Logger;
@ -63,6 +70,8 @@ public class PsCompanyInfoServiceImpl implements IPsCompanyInfoService {
private SysUserMapper sysUserMapper;
private final ISysNoticeService noticeService;
/**
* 查询公司信息
*
@ -142,7 +151,23 @@ public class PsCompanyInfoServiceImpl implements IPsCompanyInfoService {
lqw.like(bo.getMobile() != null,"com.contact_person_phone", bo.getMobile());
lqw.like(bo.getCompanyName() != null,"com.company_name", bo.getCompanyName());
lqw.eq(bo.getServiceStatus() != null,"com.service_status", bo.getServiceStatus());
lqw.exists(StringUtils.isNotBlank(bo.getUserName()),"select 1 from sys_user fsu LEFT JOIN ps_company_follow cf on com.id = cf.company_id where fsu.user_id = cf.user_id and fsu.nick_name like '%"+bo.getUserName()+"%'");
String followUserSql = "";
if (StringUtils.isNotBlank(bo.getUserName())){
followUserSql += " and fsu.nick_name like '%" + bo.getUserName() + "%'";
}
LoginUser user = LoginHelper.getLoginUser();
for (RoleDTO role : user.getRoles()) {
DataScopeType type = DataScopeType.findCode(role.getDataScope());
if (type == DataScopeType.ALL) {
continue;
}
followUserSql += " and fsu.user_id = " + user.getUserId();
break;
}
lqw.exists(StringUtils.isNotBlank(followUserSql), "select 1 from sys_user fsu LEFT JOIN ps_company_follow cf on com.id = cf.company_id where fsu.user_id = cf.user_id " + followUserSql);
//合同未作废有回款的续费合同 合同未作废有完成主任务的
lqw.and( wrapper -> wrapper
@ -199,13 +224,15 @@ public class PsCompanyInfoServiceImpl implements IPsCompanyInfoService {
LambdaQueryWrapper<PsCompanyFollow> lqw = Wrappers.lambdaQuery();
lqw.eq(PsCompanyFollow::getCompanyId, bo.getCompanyId());
psCompanyFollowMapper.delete(lqw);
PsCompanyInfoVo psCompanyInfoVo = queryById(bo.getCompanyId());
List<PsCompanyFollow> listInsert = new ArrayList<>();
for (Long followUser : bo.getListUserId()) {
PsCompanyFollow psCompanyFollow = new PsCompanyFollow();
psCompanyFollow.setCompanyId(bo.getCompanyId());
psCompanyFollow.setUserId(followUser);
listInsert.add(psCompanyFollow);
noticeService.sendNotice(SysNoticeBo.getFollowInstance(followUser, psCompanyInfoVo.getCompanyName()));
}
psCompanyFollowMapper.insertBatch(listInsert);
}

View File

@ -39,6 +39,7 @@ import jodd.util.StringUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -80,7 +81,9 @@ public class PsContractInfoServiceImpl implements IPsContractInfoService {
@Resource
private final ApproverContainer container;
private final IPsTaskService taskMainService;
@Autowired
@Lazy
private IPsTaskService taskMainService;
private final PsTaskMainMapper taskMainMapper;
private final PsTaskAppointMapper taskAppointMapper;
private final PsApproverRecordMapper recordMapper;

View File

@ -30,6 +30,7 @@ import com.pusong.system.service.ISysOssService;
import jakarta.annotation.Resource;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
@ -56,8 +57,9 @@ public class PsContractPayServiceImpl implements IPsContractPayService {
@Resource
private final ApproverContainer container;
private final IPsApproverRecordService approverRecordService;
// @Autowired
// private IPsContractInfoService contractInfoService;
@Autowired
@Lazy
private IPsContractInfoService contractInfoService;
private final ISysNoticeService noticeService;
/**
* 查询合同回款记录列表
@ -235,8 +237,8 @@ public class PsContractPayServiceImpl implements IPsContractPayService {
info.setPayStatus(PayStatusEnum.SUCCESS.getCode());
baseMapper.updateById(info);
// PsContractInfoVo src = contractInfoService.queryContractByCode(info.getContractCode());
// noticeService.sendNotice(SysNoticeBo.getReturnPayingInstance(info.getCreateBy(), src.getPsCustomInfoVo().getCustomName()));
PsContractInfoVo src = contractInfoService.queryContractByCode(info.getContractCode());
noticeService.sendNotice(SysNoticeBo.getReturnPayingInstance(info.getCreateBy(), src.getPsCustomInfoVo().getCustomName()));
return info.getContractCode();
}

View File

@ -25,8 +25,11 @@ import com.pusong.common.core.utils.StringUtils;
import com.pusong.common.mybatis.core.page.PageQuery;
import com.pusong.common.mybatis.core.page.TableDataInfo;
import com.pusong.common.satoken.utils.LoginHelper;
import com.pusong.system.domain.SysUser;
import com.pusong.system.domain.bo.SysNoticeBo;
import com.pusong.system.domain.vo.SysOssVo;
import com.pusong.system.domain.vo.SysUserVo;
import com.pusong.system.mapper.SysUserMapper;
import com.pusong.system.service.ISysNoticeService;
import com.pusong.system.service.ISysOssService;
import jakarta.annotation.Resource;
@ -35,6 +38,7 @@ import org.apache.ibatis.executor.BatchResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
@ -69,7 +73,11 @@ public class PsTaskServiceImpl implements IPsTaskService {
@Autowired
private PsContractBusinessMapper businessMapper;
private final ISysNoticeService noticeService;
// private final IPsContractInfoService contractInfoService;
@Autowired
@Lazy
private final IPsContractInfoService contractInfoService;
private SysUserMapper sysUserMapper;
/**
* 新增主任务
@ -411,8 +419,8 @@ public class PsTaskServiceImpl implements IPsTaskService {
main.setFinishDate(new Date());
baseMapper.updateById(main);
// PsContractInfoVo contract = contractInfoService.queryContractByCode(main.getContractCode());
// noticeService.sendNotice(SysNoticeBo.getTaskFinishInstance(contract.getCustomManager(), contract.getPsCustomInfoVo().getCustomName()));
PsContractInfoVo contract = contractInfoService.queryContractByCode(main.getContractCode());
noticeService.sendNotice(SysNoticeBo.getTaskFinishInstance(contract.getCustomManager(), contract.getPsCustomInfoVo().getCustomName()));
return main.getContractCode();
}
@ -437,6 +445,27 @@ public class PsTaskServiceImpl implements IPsTaskService {
appoint.setFinishDate(new Date());
appoint.setTaskDesc(desc);
appointMapper.updateById(appoint);
PsTaskMain mainTask = baseMapper.selectById(appoint.getTaskId());
PsCompanyInfoVo psCompanyInfoVo = null;
if (mainTask != null){
psCompanyInfoVo = companyInfoService.queryById(mainTask.getServiceCompanyId());
}
SysUserVo sysUserVo = sysUserMapper.selectVoById(appoint.getExecutor());
String excuterName = sysUserVo == null ? "" : sysUserVo.getNickName();
if (psCompanyInfoVo != null){
if ("1".equals(appoint.getAppointType())){
noticeService.sendNotice(SysNoticeBo.getNqFinishInstance(psCompanyInfoVo.getCompanyName(), excuterName));
}else if ("2".equals(appoint.getAppointType())){
noticeService.sendNotice(SysNoticeBo.getWqFinishInstance(psCompanyInfoVo.getCompanyName(), excuterName));
}else if ("3".equals(appoint.getAppointType())){
noticeService.sendNotice(SysNoticeBo.getTqFinishInstance(psCompanyInfoVo.getCompanyName(), excuterName));
}
}
}
/**
@ -463,9 +492,13 @@ public class PsTaskServiceImpl implements IPsTaskService {
* @param id 任务委派表id
* @param executorId 任务新的执行者id
*/
public void taskReset(Long id, List<Long> executorIds){
public void taskReset(Long id, String appointType, List<Long> executorIds){
if (appointType == null){
appointType = "1";
}
QueryWrapper<PsTaskAppoint> lqw = new QueryWrapper<>();
lqw.eq("task_id", id);
lqw.eq("appoint_type", appointType);
List<PsTaskAppoint> appoints = appointMapper.selectList(lqw);
if (appoints.isEmpty()){
throw new ServiceException("当前未指派任何人, 任务状态无法改派");
@ -490,6 +523,15 @@ public class PsTaskServiceImpl implements IPsTaskService {
removeParam.in("executor", remove);
appointMapper.delete(removeParam);
PsTaskMain mainTask = baseMapper.selectById((appoints.get(0).getTaskId()));
PsCompanyInfoVo psCompanyInfoVo = null;
if (mainTask != null){
psCompanyInfoVo = companyInfoService.queryById(mainTask.getServiceCompanyId());
}
QueryWrapper<SysUser> userQuery = new QueryWrapper<>();
userQuery.in("user_id", updateExecutorIdSet);
List<SysUserVo> sysUserVos = sysUserMapper.selectUserList(userQuery);
String excuterNames = sysUserVos.stream().map(SysUserVo::getUserName).collect(Collectors.joining(""));
List<PsTaskAppoint> insertList = new ArrayList<>();
for (Long userIdStr : updateExecutorIdSet) {
@ -501,6 +543,17 @@ public class PsTaskServiceImpl implements IPsTaskService {
psTaskAppoint.setExecutor(userIdStr);
psTaskAppoint.setTaskContentDesc(appoints.get(0).getTaskContentDesc());
insertList.add(psTaskAppoint);
if (psCompanyInfoVo != null){
if ("1".equals(appointType)){
noticeService.sendNotice(SysNoticeBo.getNqResetInstance(userIdStr, psCompanyInfoVo.getCompanyName(), excuterNames));
}else if ("2".equals(appointType)){
noticeService.sendNotice(SysNoticeBo.getWqResetInstance(userIdStr, psCompanyInfoVo.getCompanyName(), excuterNames));
}else if ("3".equals(appointType)){
noticeService.sendNotice(SysNoticeBo.getTqResetInstance(userIdStr, psCompanyInfoVo.getCompanyName(), excuterNames));
}
}
}
appointMapper.insert(insertList);
}
@ -606,8 +659,8 @@ public class PsTaskServiceImpl implements IPsTaskService {
info.setTaskStatus(TaskStatusEnum.FINISH.getCode());
baseMapper.updateById(info);
// PsContractInfoVo contract = contractInfoService.queryContractByCode(info.getContractCode());
// noticeService.sendNotice(SysNoticeBo.getFapiaoInstance(contract.getCustomManager(), contract.getPsCustomInfoVo().getCustomName()));
PsContractInfoVo contract = contractInfoService.queryContractByCode(info.getContractCode());
noticeService.sendNotice(SysNoticeBo.getFapiaoInstance(contract.getCustomManager(), contract.getPsCustomInfoVo().getCustomName()));
}
/**
* 任务暂停

View File

@ -0,0 +1,26 @@
package com.pusong.system;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* sys_role表 角色
*/
@Getter
@AllArgsConstructor
public enum MenuEnum {
sign("approval1","电子签章审批"),
rollpdf("approval2","回传合同审批"),
zuofei("approval4","合同作废审批"),
zxzg("approval5","任务作废审批"),
freeTask("approval8","免费工单审批"),
updateContract("approval3","合同修改审批"),
taskFinish("approval6","任务完成审批"),
pay("approval9","回款审批"),
returnPay("approval7","退款审批"),
stopAcc("approval11","停止代账审批"),
gonghai("approval10","公海审批"),
;
private String path;
private String text;
}

View File

@ -52,7 +52,7 @@ public class SysNotice extends TenantEntity {
/**
* 接收角色
*/
private String recRole;
// private String recRole;
/**
* 接收uid

View File

@ -1,5 +1,6 @@
package com.pusong.system.domain.bo;
import com.pusong.system.MenuEnum;
import com.pusong.system.RoleEnum;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
@ -11,6 +12,8 @@ import com.pusong.common.mybatis.core.domain.BaseEntity;
import com.pusong.system.domain.SysNotice;
import javax.management.relation.Role;
import java.util.Arrays;
import java.util.List;
/**
* 通知公告业务对象 sys_notice
@ -64,7 +67,11 @@ public class SysNoticeBo extends BaseEntity {
/**
* 接收角色
*/
private String recRole;
private List<String> recRole;
/**
* 拥有该菜单的角色
*/
private String recMenuRole;
/**
* 接收uid
@ -83,7 +90,7 @@ public class SysNoticeBo extends BaseEntity {
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent("\uD83C\uDF89【公海商机来袭\uD83C\uDF89【公海】有新客户啦速来认领抢占先机");
noticeBo.setRecRole(RoleEnum.xiaoshou.getCode());
noticeBo.setRecRole(Arrays.asList(RoleEnum.xiaoshou.getCode()));
noticeBo.setJumpType(0);
return noticeBo;
}
@ -259,7 +266,7 @@ public class SysNoticeBo extends BaseEntity {
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent("有一笔【"+ coustomName +"】的待处理的退款,请及时处理。");
noticeBo.setRecRole(RoleEnum.caiwu.getCode());
noticeBo.setRecRole(Arrays.asList(RoleEnum.caiwu.getCode()));
noticeBo.setJumpType(0);
return noticeBo;
}
@ -301,7 +308,7 @@ public class SysNoticeBo extends BaseEntity {
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent("新增【"+ coustomName +"】的开票需求,请及时处理。");
noticeBo.setRecRole(RoleEnum.caiwu.getCode());
noticeBo.setRecRole(Arrays.asList(RoleEnum.caiwu.getCode()));
noticeBo.setJumpType(0);
return noticeBo;
}
@ -332,7 +339,7 @@ public class SysNoticeBo extends BaseEntity {
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent(""+ serviceCompanyName +"】的免费工单已审批通过,免费工单任务已生成,请继续跟进。");
noticeBo.setRecRole(RoleEnum.zxzg.getCode());
noticeBo.setRecRole(Arrays.asList(RoleEnum.zxzg.getCode()));
noticeBo.setJumpType(0);
return noticeBo;
}
@ -346,5 +353,140 @@ public class SysNoticeBo extends BaseEntity {
noticeBo.setJumpType(0);
return noticeBo;
}
public static SysNoticeBo getFreeTaskErrorToRoleInstance(String serviceCompanyName, String desc){
SysNoticeBo noticeBo = new SysNoticeBo();
noticeBo.setNoticeType("1");
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent(""+ serviceCompanyName +"】的免费工单已拒绝,请确认相关信息,拒绝原因:" + desc);
noticeBo.setRecRole(Arrays.asList(RoleEnum.zxzg.getCode()));
noticeBo.setJumpType(0);
return noticeBo;
}
public static SysNoticeBo getFollowInstance(long uid, String serviceCompanyName){
SysNoticeBo noticeBo = new SysNoticeBo();
noticeBo.setNoticeType("1");
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent(""+ serviceCompanyName +"】的跟进人员分配成功跟进服务人员财务人员1、财务人员2");
noticeBo.setRecUid(uid);
noticeBo.setJumpType(0);
return noticeBo;
}
public static SysNoticeBo getStopAccount1Instance(long uid, String serviceCompanyName){
SysNoticeBo noticeBo = new SysNoticeBo();
noticeBo.setNoticeType("1");
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent(""+ serviceCompanyName+"】的停止代账服务一级审批已通过,二级审批审批中,请继续跟进。");
noticeBo.setRecUid(uid);
noticeBo.setJumpType(0);
return noticeBo;
}
public static SysNoticeBo getStopAccount2Instance(long uid, String serviceCompanyName){
SysNoticeBo noticeBo = new SysNoticeBo();
noticeBo.setNoticeType("1");
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent(""+ serviceCompanyName +"】的停止代账服务二级审批已通过,该公司的代账服务已终止。" );
noticeBo.setRecUid(uid);
noticeBo.setJumpType(0);
return noticeBo;
}
public static SysNoticeBo getStopAccountErrorInstance(long uid, String serviceCompanyName, String desc){
SysNoticeBo noticeBo = new SysNoticeBo();
noticeBo.setNoticeType("1");
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent(""+ serviceCompanyName +"】的停止代账服务被拒,请确认相关信息,拒绝原因:" + desc);
noticeBo.setRecUid(uid);
noticeBo.setJumpType(0);
return noticeBo;
}
public static SysNoticeBo getNewTaskInstance(String serviceCompanyName){
SysNoticeBo noticeBo = new SysNoticeBo();
noticeBo.setNoticeType("1");
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent(""+ serviceCompanyName +"】的合同任务已生成,请及时进行派单!");
noticeBo.setRecRole(Arrays.asList(RoleEnum.zxzg.getCode()));
noticeBo.setJumpType(0);
return noticeBo;
}
public static SysNoticeBo getNqResetInstance(Long uid, String serviceCompanyName, String executeNames){
SysNoticeBo noticeBo = new SysNoticeBo();
noticeBo.setNoticeType("1");
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent(""+ serviceCompanyName +"】的内勤任务已派单/改派成功,内勤服务人员:" + executeNames);
noticeBo.setRecUid(uid);
noticeBo.setJumpType(0);
return noticeBo;
}
public static SysNoticeBo getWqResetInstance(Long uid, String serviceCompanyName, String executeNames){
SysNoticeBo noticeBo = new SysNoticeBo();
noticeBo.setNoticeType("1");
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent(""+ serviceCompanyName +"】的外勤任务已派单/改派成功,外勤服务人员:" + executeNames );
noticeBo.setRecUid(uid);
noticeBo.setJumpType(0);
return noticeBo;
}
public static SysNoticeBo getTqResetInstance(Long uid, String serviceCompanyName, String executeNames){
SysNoticeBo noticeBo = new SysNoticeBo();
noticeBo.setNoticeType("1");
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent(""+ serviceCompanyName +"】的特勤任务已派单/改派成功,特勤服务人员:"+ executeNames);
noticeBo.setRecUid(uid);
noticeBo.setJumpType(0);
return noticeBo;
}
public static SysNoticeBo getNqFinishInstance(String serviceCompanyName, String executeName){
SysNoticeBo noticeBo = new SysNoticeBo();
noticeBo.setNoticeType("1");
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent("内勤人员【"+ executeName +"】已完成【"+ serviceCompanyName +"】的内勤任务");
noticeBo.setRecRole(Arrays.asList(RoleEnum.zxzg.getCode()));
noticeBo.setJumpType(0);
return noticeBo;
}
public static SysNoticeBo getWqFinishInstance(String serviceCompanyName, String executeName){
SysNoticeBo noticeBo = new SysNoticeBo();
noticeBo.setNoticeType("1");
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent("外勤人员【"+ executeName +"】已完成【"+ serviceCompanyName +"】的外勤任务");
noticeBo.setRecRole(Arrays.asList(RoleEnum.zxzg.getCode()));
noticeBo.setJumpType(0);
return noticeBo;
}
public static SysNoticeBo getTqFinishInstance(String serviceCompanyName, String executeName){
SysNoticeBo noticeBo = new SysNoticeBo();
noticeBo.setNoticeType("1");
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent("外勤人员【"+ executeName +"】已完成【"+ serviceCompanyName +"】的外勤任务");
noticeBo.setRecRole(Arrays.asList(RoleEnum.zxzg.getCode()));
noticeBo.setJumpType(0);
return noticeBo;
}
public static SysNoticeBo getWaitApplyInstance(String applyUserName, MenuEnum menuEnum){
SysNoticeBo noticeBo = new SysNoticeBo();
noticeBo.setNoticeType("1");
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent(""+ applyUserName +"】提交的【" + menuEnum.getText() + "】待你审批!");
noticeBo.setRecMenuRole(menuEnum.getPath());
noticeBo.setJumpType(0);
return noticeBo;
}
}

View File

@ -12,6 +12,8 @@ import com.pusong.common.core.xss.Xss;
import com.pusong.common.mybatis.core.domain.BaseEntity;
import com.pusong.system.domain.SysUser;
import java.util.List;
/**
* 用户信息业务对象 sys_user
*
@ -110,7 +112,7 @@ public class SysUserBo extends BaseEntity {
/**
* 数据权限 当前角色key
*/
private String roleKey;
private List<String> roleKey;
/**
* 排除不查询的用户(工作流用)

View File

@ -3,6 +3,7 @@ package com.pusong.system.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.pusong.system.domain.SysMenu;
import org.apache.ibatis.annotations.Param;
import com.pusong.common.mybatis.annotation.DataColumn;
import com.pusong.common.mybatis.annotation.DataPermission;
@ -59,4 +60,7 @@ public interface SysRoleMapper extends BaseMapperPlus<SysRole, SysRoleVo> {
*/
List<SysRoleVo> selectRolesByUserId(Long userId);
List<SysRoleVo> selectRoleByMenuPath(@Param(Constants.WRAPPER) Wrapper<SysMenu> queryWrapper);
}

View File

@ -1,7 +1,9 @@
package com.pusong.system.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.pusong.common.core.domain.R;
@ -13,13 +15,16 @@ import com.pusong.common.mybatis.core.page.TableDataInfo;
import com.pusong.common.websocket.dto.WebSocketMessageDto;
import com.pusong.common.websocket.holder.WebSocketSessionHolder;
import com.pusong.common.websocket.utils.WebSocketUtils;
import com.pusong.system.domain.SysMenu;
import com.pusong.system.domain.SysNotice;
import com.pusong.system.domain.SysUser;
import com.pusong.system.domain.bo.SysNoticeBo;
import com.pusong.system.domain.bo.SysUserBo;
import com.pusong.system.domain.vo.SysNoticeVo;
import com.pusong.system.domain.vo.SysRoleVo;
import com.pusong.system.domain.vo.SysUserVo;
import com.pusong.system.mapper.SysNoticeMapper;
import com.pusong.system.mapper.SysRoleMapper;
import com.pusong.system.mapper.SysUserMapper;
import com.pusong.system.service.ISysNoticeService;
import com.pusong.system.service.ISysUserService;
@ -30,6 +35,7 @@ import org.springframework.web.socket.WebSocketSession;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* 公告 服务层实现
@ -44,6 +50,7 @@ public class SysNoticeServiceImpl implements ISysNoticeService {
private final SysUserMapper userMapper;
private final DictService dictService;
private final ISysUserService userService;
private final SysRoleMapper roleMapper;
@Override
public TableDataInfo<SysNoticeVo> selectPageNoticeList(SysNoticeBo notice, PageQuery pageQuery) {
@ -103,6 +110,15 @@ public class SysNoticeServiceImpl implements ISysNoticeService {
String type = dictService.getDictLabel("sys_notice_type", bo.getNoticeType());
List<SysNotice> insertData = new ArrayList<>();
List<Long> uids = new ArrayList<>();
if (bo.getRecMenuRole() != null){
QueryWrapper<SysMenu> qw = Wrappers.query();
qw.eq("menu.path", bo.getRecMenuRole());
List<SysRoleVo> sysRoleVos = roleMapper.selectRoleByMenuPath(qw);
List<String> roleKeyList = sysRoleVos.stream().map(SysRoleVo::getRoleKey).toList();
bo.setRecRole(roleKeyList);
}
if (bo.getRecRole() != null){
SysUserBo query = new SysUserBo();
query.setRoleKey(bo.getRecRole());

View File

@ -130,7 +130,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
QueryWrapper<SysUser> wrapper = Wrappers.query();
wrapper.eq("u.del_flag", UserConstants.USER_NORMAL)
.eq(ObjectUtil.isNotNull(user.getRoleId()), "r.role_id", user.getRoleId())
.in(ObjectUtil.isNotNull(user.getRoleKey()), "r.role_key", user.getRoleKey().split(","))
.in(ObjectUtil.isNotNull(user.getRoleKey()), "r.role_key", user.getRoleKey())
.like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName())
.eq(StringUtils.isNotBlank(user.getStatus()), "u.status", user.getStatus())
.like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber())

View File

@ -58,4 +58,10 @@
WHERE r.del_flag = '0' and r.role_id = #{roleId}
</select>
<select id="selectRoleByMenuPath" resultMap="SysRoleResult">
select r.role_key from sys_menu menu
left join sys_role_menu rm on rm.menu_id = menu.menu_id
left join sys_role r on r.role_id = rm.role_id
${ew.getCustomSqlSegment}
</select>
</mapper>