首页统计和通知

This commit is contained in:
mx 2024-11-06 15:40:16 +08:00
parent a8880c12cf
commit a5d565ca97
34 changed files with 767 additions and 159 deletions

View File

@ -4,7 +4,15 @@ import cn.dev33.satoken.annotation.SaIgnore;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.pusong.business.domain.PsContractInfo;
import com.pusong.common.core.utils.*;
import com.pusong.system.RoleEnum;
import com.pusong.system.domain.SysNotice;
import com.pusong.system.domain.vo.SysNoticeVo;
import com.pusong.system.mapper.SysNoticeMapper;
import com.pusong.web.service.IAuthStrategy;
import com.pusong.web.service.SysRegisterService;
import jakarta.servlet.http.HttpServletRequest;
@ -44,6 +52,7 @@ import org.springframework.web.bind.annotation.*;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -70,7 +79,7 @@ public class AuthController {
private final ISysSocialService socialUserService;
private final ISysClientService clientService;
private final ScheduledExecutorService scheduledExecutorService;
private final SysNoticeMapper sysNoticeMapper;
/**
* 登录方法
@ -104,10 +113,23 @@ public class AuthController {
Long userId = LoginHelper.getUserId();
scheduledExecutorService.schedule(() -> {
WebSocketMessageDto dto = new WebSocketMessageDto();
dto.setMessage("欢迎登录pusong-vue-plus后台管理系统");
// WebSocketMessageDto dto = new WebSocketMessageDto();
// dto.setMessage("欢迎登录pusong-vue-plus后台管理系统");
// dto.setSessionKeys(List.of(userId));
// WebSocketUtils.publishMessage(dto);
WebSocketMessageDto dto;
QueryWrapper<SysNotice> queryWrapper = new QueryWrapper<SysNotice>()
.in( "rec_uid", userId);
List<SysNotice> sysNotices = sysNoticeMapper.selectList(queryWrapper);
for (SysNotice sysNotice : sysNotices) {
dto = new WebSocketMessageDto();
// dto.setMessage(sysNotice.getNoticeContent());
SysNoticeVo vo = MapstructUtils.convert(sysNotice, SysNoticeVo.class);
dto.setMessage(JsonUtils.toJsonString(vo));
dto.setSessionKeys(List.of(userId));
WebSocketUtils.publishMessage(dto);
}
}, 3, TimeUnit.SECONDS);
return R.ok(loginVo);
}

View File

@ -1,5 +1,7 @@
package com.pusong.common.mybatis.annotation;
import com.pusong.common.mybatis.enums.DataScopeType;
import java.lang.annotation.*;
/**
@ -25,4 +27,10 @@ public @interface DataColumn {
*/
String[] value() default "dept_id";
/**
* 仅这个有效
* @return
*/
DataScopeType dataScopeType() default DataScopeType.NULL;
}

View File

@ -21,7 +21,7 @@ import com.pusong.common.mybatis.helper.DataPermissionHelper;
@Getter
@AllArgsConstructor
public enum DataScopeType {
NULL("-1", "", ""),
/**
* 全部数据权限
*/
@ -45,7 +45,13 @@ public enum DataScopeType {
/**
* 仅本人数据权限
*/
SELF("5", " #{#userName} = #{#user.userId} ", " 1 = 0 ");
SELF("5", " #{#userName} = #{#user.userId} ", " 1 = 0 "),
/**
* 财务合同部门及以下数据
*/
CAIWU_HETONG("6", " #{#deptName} = #{#user.deptId} ", " 1 = 0 ")
;
private final String code;

View File

@ -122,17 +122,21 @@ public class PlusDataPermissionHandler {
}
// 全部数据权限直接返回
if (type == DataScopeType.ALL) {
return "";
// return "";
continue;
}
boolean isSuccess = false;
for (DataColumn dataColumn : dataColumns) {
if (type == DataScopeType.CAIWU_HETONG && DataScopeType.CAIWU_HETONG != dataColumn.dataScopeType()){
continue;
}
if (dataColumn.key().length != dataColumn.value().length) {
throw new ServiceException("角色数据范围异常 => key与value长度不匹配");
}
// 不包含 key 变量 则不处理
if (!StringUtils.containsAny(type.getSqlTemplate(),
Arrays.stream(dataColumn.key()).map(key -> "#" + key).toArray(String[]::new)
)) {
Arrays.stream(dataColumn.key()).map(key -> "#" + key).toArray(String[]::new))) {
continue;
}
// 设置注解变量 key 为表达式变量 value 为变量值

View File

@ -36,6 +36,7 @@ import java.util.Map;
@RequiredArgsConstructor
@RestController
@RequestMapping("/business/home")
@SaIgnore
public class HomeController extends BaseController {
private final HomeService homeService;
@ -96,19 +97,19 @@ public class HomeController extends BaseController {
* @return
*/
@GetMapping("/getUserContractAndPayInfo")
public R<Collection<UserAmountInfoVo>> getUserContractAndPayInfo(@RequestParam() Integer type){
return R.ok(homeService.getUserContractAndPayInfo(type));
public R<UserAmountVo> getUserContractAndPayInfo(@RequestParam() Integer type, @RequestParam() Boolean isCaiwu){
return R.ok(homeService.getUserContractAndPayInfo(type, isCaiwu));
}
/**
* 首页大盘数据人员成交数据列表
* @param type 1本月 2上月 3本季度 4本年 5所有
* @return
*/
@SaCheckPermission("business:salary:list")
@GetMapping("/getUserContractAmounts")
public R<List<UserContractAmountVo>> getUserContractAmounts(@RequestParam() Integer type, @RequestParam() Long deptId) {
return R.ok(homeService.getUserContractAmountsByDeptId(type,deptId));//缺少已回款未回款金额
}
// /**
// * 首页大盘数据人员成交数据列表
// * @param type 1本月 2上月 3本季度 4本年 5所有
// * @return
// */
// @SaCheckPermission("business:salary:list")
// @GetMapping("/getUserContractAmounts")
// public R<List<UserContractAmountVo>> getUserContractAmounts(@RequestParam() Integer type, @RequestParam() Long deptId) {
// return R.ok(homeService.getUserContractAmountsByDeptId(type,deptId));//缺少已回款未回款金额
// }
/**
* 首页大盘数据人员转介绍成交数据列表
@ -117,21 +118,21 @@ public class HomeController extends BaseController {
*/
@SaCheckPermission("business:salary:list")
@GetMapping("/getUserContractSourceAmounts")
public R<List<UserContractAmountVo>> getUserContractSourceAmounts(@RequestParam() Integer type, @RequestParam() Long deptId){
return R.ok(homeService.getUserContractSourceAmountsByDeptId(type,deptId));//缺少已回款未回款金额
public R<UserAmountVo> getUserContractSourceAmounts(@RequestParam() Integer type, @RequestParam() Boolean isCaiwu){
return R.ok(homeService.getUserContractSourceAmountsByDeptId(type, isCaiwu));//缺少已回款未回款金额
}
// /**
// * 首页大盘数据销售个人数据
// * @param type 1本月 2上月 3本季度 4本年 5所有
// * @return
// */
// @SaCheckPermission("business:salary:list")
// @GetMapping("/channelByUser")
// public R<ChannelAmountVo> channelByUser(@RequestParam() Integer type) {
// return R.ok(homeService.byChannel(type,2));
// }
/**
* 首页大盘数据销售个人数据
* @param type 1本月 2上月 3本季度 4本年 5所有
* @return
*/
@SaCheckPermission("business:salary:list")
@GetMapping("/channelByUser")
public R<ChannelAmountVo> channelByUser(@RequestParam() Integer type) {
return R.ok(homeService.byChannel(type,2));
}
/**
* 首页大盘数据任务完成情况
* @param type 1本月 2上月 3本季度 4本年 5所有
@ -158,7 +159,7 @@ public class HomeController extends BaseController {
* @return
*/
@GetMapping("/salasData")
public R<Map<String,Object>> salasData(@RequestParam() Integer type) {
public R<SalasVo> salasData(@RequestParam() Integer type) {
return R.ok(homeService.salasData(type));
}
}

View File

@ -28,6 +28,11 @@ public class ChannelAmountVo {
*/
private BigDecimal all;
/**
* 总roi
*/
private BigDecimal roi;
/**
* 各渠道成交金额
*/

View File

@ -33,4 +33,8 @@ public class ChannelPayInfo {
*/
private BigDecimal money;
/**
* 成本
*/
private BigDecimal cost;
}

View File

@ -30,4 +30,20 @@ public class DataAmountVo {
* 未回款金额
*/
private BigDecimal unPayMoney;
/**
* 项目成本
*/
private BigDecimal cost;
/**
* 投入
*/
private BigDecimal investCapital;
/**
* roi
*/
private BigDecimal roi;
}

View File

@ -22,6 +22,11 @@ public class RenewalInfoVo {
*/
private Integer contractNum;
/**
* 到期合同总额
*/
private BigDecimal contractAmount;
/**
* 已续费合同总数
*/
@ -41,6 +46,14 @@ public class RenewalInfoVo {
*/
private BigDecimal unPayMoney;
/**
* 已回款客户占比
*/
private String customPer;
/**
* 未回款客户占比
*/
private String unPaycustomPer;
/**
* 已回款金额占比
*/

View File

@ -21,6 +21,16 @@ public class ReturnMoneyInfoVo {
* 当月合同总数
*/
private Integer contractNum;
/**
* 当月合同总数
*/
private Integer returnContractNum;
/**
* 当月合同总数
*/
private Integer noContractNum;
/**
* 当月合同回款金额
*/

View File

@ -0,0 +1,61 @@
package com.pusong.business.domain.vo.home;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
@Data
public class SalasVo {
/**
* 当前时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm")
private Date currentDate = new Date();
/**
* 统计范围
*/
private String dateStr;
/**
* 公海数量
*/
private int gonghaiNum;
/**
* 没有回访记录的客户待跟进客户
*/
private int noCallbackRecordNum;
/**
* 有回访记录的客户回访客户数
*/
private int callbackRecordNum;
/**
* 生成合同数
*/
private int contractNum;
/**
* 已成交总额
*/
private BigDecimal sumContractAmount;
/**
* 已回款金额
*/
private BigDecimal payContractAmount;
/**
* 未回款金额
*/
private BigDecimal unPayContractAmount;
}

View File

@ -33,6 +33,46 @@ public class UserAmountInfoVo {
*/
private BigDecimal unPaySumAmount=new BigDecimal(0);
/**
* 托管类型合同总金额 类型号:4
*/
private BigDecimal tuoGuanAmount = new BigDecimal(0);
/**
* 续费类型合同总金额
*/
private BigDecimal xuFeiAmount = new BigDecimal(0);
/**
* 软件定制类型合同总金额 类型号:9
*/
private BigDecimal softwareDevAmount = new BigDecimal(0);
/**
* 其他类型合同总金额
*/
private BigDecimal otherAmount = new BigDecimal(0);
/**
* 转介绍的合同金额
*/
private BigDecimal jieShaoAmount = new BigDecimal(0);
/**
* 与其他人合同金额的占比
*/
private String amountPer;
public void addTuoGuanAmount(BigDecimal amount){
tuoGuanAmount=tuoGuanAmount.add(amount);
}
public void addXuFeiAmount(BigDecimal amount){
xuFeiAmount=xuFeiAmount.add(amount);
}
public void addSoftwareDevAmount(BigDecimal amount){
softwareDevAmount=softwareDevAmount.add(amount);
}
public void addOtherAmount(BigDecimal amount) {
otherAmount=otherAmount.add(amount);
}
public void addContractNum(){
contractNum++;
}

View File

@ -0,0 +1,46 @@
package com.pusong.business.domain.vo.home;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.math.BigDecimal;
import java.util.*;
@Data
public class UserAmountVo {
/**
* 当前时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm")
private Date currentDate = new Date();
/**
* 统计范围
*/
private String dateStr;
/**
* 成交总金额
*/
private BigDecimal all;
/**
* 各人员成交金额
*/
private Collection<UserAmountInfoVo> userAmountList;
/**
* 转介绍总计数据
*/
private UserContractAmountVo daPan;
/**
* 转介绍
*/
private Collection<UserContractAmountVo> zjsList;
}

View File

@ -38,4 +38,10 @@ public class UserContractAmountInfo {
* 已付款金额
*/
private BigDecimal payedMoney;
/**
* 与其他人合同金额的占比
*/
private String amountPer;
}

View File

@ -16,22 +16,56 @@ public class UserContractAmountVo {
* 用户名字
*/
private String nickName;
/**
* 与其他人合同金额的占比
*/
private String amountPer;
/**
* 转介绍合同数量
*/
private Integer jieShaoContractNum = 0;
/**
* 转介绍合同金额占比
*/
private String jieShaoPer;
/**
* 其他合同金额占比
*/
private String otherPer;
/**
* 用户所有合同总金额
*/
private BigDecimal sumAmount = new BigDecimal(0);
/**
* 转介绍的合同金额
*/
private BigDecimal jieShaoAmount = new BigDecimal(0);
/**
* 其他类型合同总金额
*/
private BigDecimal otherAmount = new BigDecimal(0);
/**
* 转介绍合同数量
*/
private Integer jieShaoContractNum = 0;
/**
* 其他合同数量
*/
private Integer otherContractNum = 0;
/**
* 已支付总金额
*/
private BigDecimal jsPayedSumAmount=new BigDecimal(0);
private BigDecimal otherPayedSumAmount=new BigDecimal(0);
/**
* 未支付金额
*/
private BigDecimal jsUnPaySumAmount=new BigDecimal(0);
private BigDecimal otherUnPaySumAmount=new BigDecimal(0);
/**
* 与其他人合同金额的占比
*/
private String amountPer;
/**
* 托管类型合同总金额 类型号:4
*/
@ -44,14 +78,8 @@ public class UserContractAmountVo {
* 软件定制类型合同总金额 类型号:9
*/
private BigDecimal softwareDevAmount = new BigDecimal(0);
/**
* 其他类型合同总金额
*/
private BigDecimal otherAmount = new BigDecimal(0);
/**
* 转介绍的合同金额
*/
private BigDecimal jieShaoAmount = new BigDecimal(0);
public void addSumAmount(BigDecimal amount){
sumAmount=sumAmount.add(amount);
@ -74,4 +102,24 @@ public class UserContractAmountVo {
public void addJieShaoContractNum() {
jieShaoContractNum++;
}
public void addOtherContractNum() {
otherContractNum++;
}
public void addJsPayedSumAmount(BigDecimal amount){
if(amount==null){return;}
jsPayedSumAmount = jsPayedSumAmount.add(amount);
}
public void addJsUnPayedSumAmount(BigDecimal amount){
if(amount==null){return;}
jsUnPaySumAmount = jsUnPaySumAmount.add(amount);
}
public void addOtherPayedSumAmount(BigDecimal amount){
if(amount==null){return;}
otherPayedSumAmount = otherPayedSumAmount.add(amount);
}
public void addOtherUnPayedSumAmount(BigDecimal amount){
if(amount==null){return;}
otherUnPaySumAmount = otherUnPaySumAmount.add(amount);
}
}

View File

@ -11,10 +11,12 @@ import com.pusong.business.domain.vo.PsContractInfoVo;
import com.pusong.business.domain.vo.PsCustomInfoVo;
import com.pusong.business.domain.vo.PsSalaryContractVo;
import com.pusong.business.domain.vo.home.ChannelPayInfo;
import com.pusong.business.domain.vo.home.SalasVo;
import com.pusong.business.domain.vo.home.UserContractAmountInfo;
import com.pusong.common.mybatis.annotation.DataColumn;
import com.pusong.common.mybatis.annotation.DataPermission;
import com.pusong.common.mybatis.core.mapper.BaseMapperPlus;
import com.pusong.common.mybatis.enums.DataScopeType;
import org.apache.ibatis.annotations.Param;
import java.time.LocalDate;
@ -31,7 +33,8 @@ public interface PsContractInfoMapper extends BaseMapperPlus<PsContractInfo, PsC
@DataPermission({
@DataColumn(key = "userName", value = "info.custom_manager")
@DataColumn(key = "userName", value = "info.custom_manager"),
@DataColumn(key = "deptName", value = "us.dept_id", dataScopeType = DataScopeType.CAIWU_HETONG)
})
Page<PsContractInfoVo> selectPageContractList(@Param("page") Page<PsContractInfo> page, @Param(Constants.WRAPPER) Wrapper<PsContractInfo> queryWrapper);
@ -49,9 +52,9 @@ public interface PsContractInfoMapper extends BaseMapperPlus<PsContractInfo, PsC
List<PsSalaryContract> querySalaryListByCodes(@Param(Constants.WRAPPER) Wrapper<PsContractInfo> queryWrapper);
List<Map<String,Object>> homePageReturnMoneyInfo(@Param("queryParam") Map<String, Object> queryParam);
List<UserContractAmountInfo> getUserContractSourceAmountsByDeptId(@Param("queryParam") Map<String, Object> queryParam);
List<UserContractAmountInfo> getUserContractSourceAmountsByDeptId(@Param("queryParam") Map<String, Object> queryParam, @Param(Constants.WRAPPER) Wrapper<PsContractInfo> queryWrapper);
List<UserContractAmountInfo> getUserContractTypeAmountsByDeptId(@Param("queryParam") Map<String, Object> queryParam);
List<UserContractAmountInfo> getUserContractAndPayInfo(@Param("queryParam") Map<String, Object> queryParam);
List<UserContractAmountInfo> getUserContractAndPayInfo(@Param("queryParam") Map<String, Object> queryParam, @Param(Constants.WRAPPER) Wrapper<PsContractInfo> queryWrapper);
//首页查询各个渠道成交的合同
@ -62,7 +65,5 @@ public interface PsContractInfoMapper extends BaseMapperPlus<PsContractInfo, PsC
})
List<ChannelPayInfo> byChannelUser(@Param(Constants.WRAPPER) Wrapper<PsContractInfo> queryWrapper);
List<PsContractBusinessVo> selectRenewalContract(@Param(Constants.WRAPPER) Wrapper<PsContractInfo> queryWrapper);
}

View File

@ -10,6 +10,7 @@ import com.pusong.business.domain.vo.PsCustomerRecordVo;
import com.pusong.common.mybatis.annotation.DataColumn;
import com.pusong.common.mybatis.annotation.DataPermission;
import com.pusong.common.mybatis.core.mapper.BaseMapperPlus;
import com.pusong.common.mybatis.enums.DataScopeType;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@ -29,7 +30,7 @@ public interface PsCustomInfoMapper extends BaseMapperPlus<PsCustomInfo, PsCusto
List<PsCustomInfo> selectList(@Param(Constants.WRAPPER) Wrapper<PsCustomInfo> queryWrapper);
@DataPermission({
@DataColumn(key = "deptName", value = "info.create_dept"),
@DataColumn(key = "deptName", value = "info.create_dept", dataScopeType = DataScopeType.CAIWU_HETONG),
@DataColumn(key = "userName", value = "info.custom_manager")
})
Page<PsCustomInfoVo> selectPageCustomerList(@Param("page") Page<PsCustomInfo> page, @Param(Constants.WRAPPER) Wrapper<PsCustomInfo> queryWrapper);

View File

@ -0,0 +1,52 @@
package com.pusong.business.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.business.domain.PsContractInfo;
import com.pusong.business.domain.PsSalary;
import com.pusong.business.domain.PsSalaryContract;
import com.pusong.business.domain.vo.PsContractBusinessVo;
import com.pusong.business.domain.vo.PsContractInfoVo;
import com.pusong.business.domain.vo.home.ChannelPayInfo;
import com.pusong.business.domain.vo.home.SalasVo;
import com.pusong.business.domain.vo.home.UserContractAmountInfo;
import com.pusong.common.mybatis.annotation.DataColumn;
import com.pusong.common.mybatis.annotation.DataPermission;
import com.pusong.common.mybatis.core.mapper.BaseMapperPlus;
import com.pusong.common.mybatis.enums.DataScopeType;
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
public interface PsHomeMapper extends BaseMapperPlus<PsSalary, SalasVo> {
List<PsContractBusinessVo> selectRenewalContract(@Param(Constants.WRAPPER) Wrapper<PsContractInfo> queryWrapper);
int selectGonghaiNum(@Param("queryParam") Map<String, Object> queryParam);
@DataPermission({
@DataColumn(key = "userName", value = "cus.custom_manager")
})
int selectCallbackRecordNum(@Param("queryParam") Map<String, Object> queryParam);
@DataPermission({
@DataColumn(key = "userName", value = "cus.custom_manager")
})
int selectNoCallbackRecordNum(@Param("queryParam") Map<String, Object> queryParam);
@DataPermission({
@DataColumn(key = "userName", value = "info.custom_manager")
})
SalasVo selectContractNumAndAmount(@Param("queryParam") Map<String, Object> queryParam);
@DataPermission({
@DataColumn(key = "userName", value = "info.custom_manager")
})
BigDecimal selectSumPayContractAmount(@Param("queryParam") Map<String, Object> queryParam);
}

View File

@ -16,9 +16,9 @@ public interface HomeService {
ReturnMoneyInfoVo returnMoney(Integer type);
RenewalInfoVo renewal(Integer type);
List<UserContractAmountVo> getUserContractSourceAmountsByDeptId(Integer type,Long deptId);
UserAmountVo getUserContractSourceAmountsByDeptId(Integer type, boolean isCaiwu);
List<UserContractAmountVo> getUserContractAmountsByDeptId(Integer type, Long deptId);
Collection<UserAmountInfoVo> getUserContractAndPayInfo(Integer type);
UserAmountVo getUserContractAndPayInfo(Integer type, boolean isCaiwu);
/**
* 首页大盘数据各渠道成交
* @param type
@ -43,5 +43,5 @@ public interface HomeService {
* @param type
* @return
*/
Map<String,Object> salasData(Integer type);
SalasVo salasData(Integer type);
}

View File

@ -25,6 +25,7 @@ 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.RoleEnum;
import com.pusong.system.domain.bo.SysNoticeBo;
import com.pusong.system.service.ISysNoticeService;
import jakarta.annotation.PostConstruct;
@ -86,8 +87,12 @@ public abstract class ApproverAbstractServiceImpl implements ApproverService {
LoginUser loginUser = LoginHelper.getLoginUser();
if (approverType() == ApproverTypeEnum.STOPACCOUNT){
noticeService.sendNotice(SysNoticeBo.getWaitApplyInstance(loginUser.getNickname(), RoleEnum.stopacc2.getCode()));
}else{
noticeService.sendNotice(SysNoticeBo.getWaitApplyInstance(loginUser.getNickname(), approverType().getMenuEnum()));
}
}
protected abstract ApproverTypeEnum approverType();
@PostConstruct

View File

@ -22,8 +22,11 @@ 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.RoleEnum;
import com.pusong.system.domain.bo.SysNoticeBo;
import com.pusong.system.domain.vo.SysUserVo;
import com.pusong.system.service.ISysNoticeService;
import com.pusong.system.service.ISysUserService;
import jakarta.annotation.Resource;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -53,6 +56,8 @@ public class StopAccountServiceImpl extends ApproverAbstractServiceImpl {
private final IPsCompanyInfoService psCompanyInfoService;
private final ISysNoticeService noticeService;
private final ISysUserService userService;
@Override
public void success(PsApproverRecord psApproverRecord) {
if (ApproverStepEnum.INIT.getCode().equals(psApproverRecord.getUpdateData())){
@ -62,6 +67,9 @@ public class StopAccountServiceImpl extends ApproverAbstractServiceImpl {
PsCompanyInfoVo psCompanyInfoVo = psCompanyInfoService.queryById(Long.valueOf(psApproverRecord.getBusinessId()));
noticeService.sendNotice(SysNoticeBo.getStopAccount1Instance(psApproverRecord.getCreateBy(), psCompanyInfoVo.getCompanyName()));
SysUserVo sysUserVo = userService.selectUserById(psApproverRecord.getCreateBy());
noticeService.sendNotice(SysNoticeBo.getWaitApplyInstance(sysUserVo.getNickName(), RoleEnum.stopacc1.getCode()));
return;
}
if (ApproverStepEnum.CW_APPLY.getCode().equals(psApproverRecord.getUpdateData())){

View File

@ -16,6 +16,7 @@ import com.pusong.business.mapper.*;
import com.pusong.business.service.HomeService;
import com.pusong.common.core.constant.CacheNames;
import com.pusong.common.core.utils.DateUtils;
import com.pusong.system.RoleEnum;
import com.pusong.system.domain.bo.SysDictDataBo;
import com.pusong.system.domain.vo.SysDictDataVo;
import com.pusong.system.service.ISysDictDataService;
@ -38,7 +39,7 @@ import java.util.stream.Collectors;
public class HomeServiceImpl implements HomeService {
private static final Logger log = LoggerFactory.getLogger(HomeServiceImpl.class);
private final PsHomeMapper psHomeMapper;
private final PsContractInfoMapper psContractInfoMapper;
private final PsContractPayMapper payMapper;
private final PsTaskMainMapper taskMainMapper;
@ -47,7 +48,7 @@ public class HomeServiceImpl implements HomeService {
private final ISysDictDataService dictDataService;
private final PsContractBusinessMapper psContractBusinessMapper;
private final PsCustomInfoMapper psCustomInfoMapper;
/**
* 查询成交总金额
@ -163,6 +164,8 @@ public class HomeServiceImpl implements HomeService {
//当月合同款总数
BigDecimal sumMoney= new BigDecimal(0);
//回款合同数
Integer payNum = 0;
//当月已支付合同金额
BigDecimal payMoney=new BigDecimal(0);
//当月合同总数
@ -195,12 +198,19 @@ public class HomeServiceImpl implements HomeService {
repeatNum.put(contractCode,1);
sumMoney = sumMoney.add((BigDecimal) m.get("contract_amount"));
contractNum++;
if(businessType.equals("1")){
payMoney = payMoney.add(money);
payNum++;
}
}
}
ReturnMoneyInfoVo res = new ReturnMoneyInfoVo();
res.setDateStr(date);
res.setContractNum(contractNum);
res.setReturnContractNum(payNum);
res.setNoContractNum(contractNum - payNum);
res.setSumMoney(sumMoney);
res.setPayMoney(payMoney);
res.setUnPayMoney(sumMoney.subtract(payMoney));
@ -217,34 +227,56 @@ public class HomeServiceImpl implements HomeService {
String date = (String)mapParam.get("date");
QueryWrapper<PsContractBusiness> wrapper = new QueryWrapper<PsContractBusiness>()
.select("company_id", "contract_code", "sum(business_amount) as business_amount")
.eq("business_type", "2")
.between("end_date", startDate, endDate)
.ge(startDate != null,"end_date", startDate)
.le(endDate != null,"end_date", endDate)
.groupBy("company_id")
.groupBy("contract_code");
//到期的合同
List<PsContractBusiness> expireContact = psContractBusinessMapper.selectList(wrapper);
if (expireContact.isEmpty()){
RenewalInfoVo renewalInfoVo = new RenewalInfoVo();
renewalInfoVo.setContractNum(expireContact.size());
renewalInfoVo.setContractAmount(new BigDecimal("0"));
renewalInfoVo.setRenewalContractNum(0);
renewalInfoVo.setUnRenewalContractNum(0);
renewalInfoVo.setPayMoney(new BigDecimal("0"));
renewalInfoVo.setUnPayMoney(new BigDecimal("0"));
renewalInfoVo.setDateStr(date);
renewalInfoVo.setPayMoneyPer("100");
renewalInfoVo.setUnPayMoneyPer("0");
return renewalInfoVo;
}
List<Long> companyIds = expireContact.stream().map(PsContractBusiness::getCompanyId).toList();
List<String> contractCodeList = expireContact.stream().map(PsContractBusiness::getContractCode).toList();
//总到期金额
BigDecimal sumExpireAmount = expireContact.stream().map(PsContractBusiness::getBusinessAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
QueryWrapper<PsContractInfo> contractWrapper = new QueryWrapper<PsContractInfo>()
.between("apply_date", startDate, endDate)
.ge(startDate != null,"apply_date", startDate)
.le(endDate != null,"apply_date", endDate)
.eq("con.is_due", 1)
.in("cc.company_id", companyIds)
.notIn("cc.contract_code", contractCodeList);
//已续费的合同
List<PsContractBusinessVo> renewalContact = psContractInfoMapper.selectRenewalContract(contractWrapper);
List<PsContractBusinessVo> renewalContact = psHomeMapper.selectRenewalContract(contractWrapper);
//总已续费金额
BigDecimal sumRenewalAmount = renewalContact.stream().map(PsContractBusinessVo::getBusinessAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
RenewalInfoVo renewalInfoVo = new RenewalInfoVo();
renewalInfoVo.setContractNum(expireContact.size());
renewalInfoVo.setContractAmount(sumExpireAmount);
renewalInfoVo.setRenewalContractNum(renewalContact.size());
renewalInfoVo.setUnRenewalContractNum(contractCodeList.size() - renewalContact.size());
renewalInfoVo.setPayMoney(sumRenewalAmount);
renewalInfoVo.setUnPayMoney(sumExpireAmount.subtract(sumRenewalAmount));
renewalInfoVo.setDateStr(date);
renewalInfoVo.setCustomPer(new BigDecimal(renewalContact.size()).divide(new BigDecimal(expireContact.size()), 2, BigDecimal.ROUND_UP).toString());
renewalInfoVo.setUnPaycustomPer(new BigDecimal(100).subtract(new BigDecimal(renewalInfoVo.getCustomPer())).toString());
renewalInfoVo.setPayMoneyPer(renewalInfoVo.getPayMoney().divide(sumExpireAmount, 2, BigDecimal.ROUND_UP).toString());
renewalInfoVo.setUnPayMoneyPer(renewalInfoVo.getUnPayMoney().divide(sumExpireAmount, 2, BigDecimal.ROUND_UP).toString());
return renewalInfoVo;
@ -254,10 +286,10 @@ public class HomeServiceImpl implements HomeService {
/**
* 按人员成交转介绍列表根据部门获取
* @param type
* @param deptId
* @param isCaiwu
* @return
*/
public List<UserContractAmountVo> getUserContractSourceAmountsByDeptId(Integer type, Long deptId){
public UserAmountVo getUserContractSourceAmountsByDeptId(Integer type, boolean isCaiwu){
Map<String, Object> mapParam = this.getDate(type);
LocalDate startDate = (LocalDate)mapParam.get("startDate");
LocalDate endDate = (LocalDate)mapParam.get("endDate");
@ -268,12 +300,20 @@ public class HomeServiceImpl implements HomeService {
queryParam.put("endDate",endDate);
queryParam.put("contractStatus",ContractStatusEnum.INIT.getCode());
queryParam.put("isCancel",CommonStatusEnum.SUCCESS.getCode());
queryParam.put("deptId",deptId);
queryParam.put("payStatus", PayStatusEnum.SUCCESS.getCode());
List<UserContractAmountInfo> list = psContractInfoMapper.getUserContractSourceAmountsByDeptId(queryParam);
QueryWrapper<PsContractInfo> queryWrapper = new QueryWrapper<PsContractInfo>()
.in(isCaiwu, "role.role_key", Arrays.asList(RoleEnum.caiwu))
.in(!isCaiwu, "role.role_key", Arrays.asList(RoleEnum.xiaoshou));
List<UserContractAmountInfo> list = psContractInfoMapper.getUserContractSourceAmountsByDeptId(queryParam, queryWrapper);
Map<Long,UserContractAmountVo> res = new HashMap<>();
// BigDecimal sumPayAmount = new BigDecimal(0);
//记录合同编码防止重复
Map<String,String> repeatContractCode = new HashMap<>();
UserContractAmountVo daPan = new UserContractAmountVo();
for(UserContractAmountInfo obj : list){
UserContractAmountVo vo=res.get(obj.getUserId());
if(vo==null){
@ -286,32 +326,38 @@ public class HomeServiceImpl implements HomeService {
if(repeatContractCode.get(obj.getContractCode())==null){
repeatContractCode.put(obj.getContractCode(),obj.getContractCode());
vo.addSumAmount(obj.getContractAmount());
}
//判断是否为转介绍合同
daPan.addSumAmount(obj.getContractAmount());
if(contractSource.equals(obj.getCustomSource())){
vo.addJieShaoAmount(obj.getContractAmount());
vo.addJieShaoContractNum();
daPan.addJieShaoAmount(obj.getContractAmount());
daPan.addJieShaoContractNum();
}else {
vo.addOtherAmount(obj.getContractAmount());
vo.addOtherContractNum();
daPan.addOtherAmount(obj.getContractAmount());
daPan.addOtherContractNum();
}
}
//判断是否为转介绍合同
if(contractSource.equals(obj.getCustomSource())){
daPan.addJsPayedSumAmount(obj.getPayedMoney());
vo.addJsPayedSumAmount(obj.getPayedMoney());
}else {
daPan.addOtherPayedSumAmount(obj.getPayedMoney());
vo.addOtherPayedSumAmount(obj.getPayedMoney());
}
//构建表格第一行数据
UserContractAmountVo title= new UserContractAmountVo();
title.setNickName("总计");
title.setDateStr(date);
title.setOtherAmount(null);
title.setSoftwareDevAmount(null);
title.setTuoGuanAmount(null);
title.setXuFeiAmount(null);
}
//计算未付款金额
res.values().forEach(v->{
v.setJsUnPaySumAmount(v.getSumAmount().subtract(v.getJsPayedSumAmount()));
});
//按总金额降序处理
List<UserContractAmountVo> listData = res.values().stream().sorted(
Comparator.comparing(UserContractAmountVo::getSumAmount,Comparator.reverseOrder())).collect(Collectors.toList());
for (UserContractAmountVo v:listData) {
title.addSumAmount(v.getSumAmount());
}
//计算转介绍金额占比
for (UserContractAmountVo v : listData) {
if(!BigDecimal.ZERO.equals(v.getJieShaoAmount())) {
@ -320,8 +366,24 @@ public class HomeServiceImpl implements HomeService {
v.setJieShaoPer("0.00%");
}
}
listData.add(0,title);
return listData;
if (BigDecimal.ZERO.equals(daPan.getSumAmount())){
daPan.setJieShaoPer("0%");
daPan.setOtherPer("0%");
}else{
daPan.setJieShaoPer(daPan.getJieShaoAmount().multiply(new BigDecimal("100.0")).divide(daPan.getSumAmount(), 2, RoundingMode.HALF_UP).toPlainString() + "%");
daPan.setOtherPer(daPan.getOtherAmount().multiply(new BigDecimal("100.0")).divide(daPan.getSumAmount(), 2, RoundingMode.HALF_UP).toPlainString() + "%");
}
BigDecimal sumAmount = list.stream().map(UserContractAmountInfo::getContractAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
UserAmountVo userAmountVo = new UserAmountVo();
userAmountVo.setZjsList(listData);
userAmountVo.setDateStr(date);
userAmountVo.setAll(sumAmount);
userAmountVo.setDaPan(daPan);
return userAmountVo;
}
/**
* 按人员成交数据列表,根据部门获取
@ -378,7 +440,6 @@ public class HomeServiceImpl implements HomeService {
if(obj.getIsDue()!=null&&obj.getIsDue().equals("1")){
vo.addXuFeiAmount(obj.getContractAmount());
}
}
//构建表格第一行数据
@ -415,7 +476,7 @@ public class HomeServiceImpl implements HomeService {
* @param type
* @return
*/
public Collection<UserAmountInfoVo> getUserContractAndPayInfo(Integer type){
public UserAmountVo getUserContractAndPayInfo(Integer type, boolean isCaiwu){
Map<String, Object> mapParam = this.getDate(type);
LocalDate startDate = (LocalDate)mapParam.get("startDate");
LocalDate endDate = (LocalDate)mapParam.get("endDate");
@ -428,8 +489,13 @@ public class HomeServiceImpl implements HomeService {
queryParam.put("isCancel", CommonStatusEnum.SUCCESS.getCode());
queryParam.put("payStatus", PayStatusEnum.SUCCESS.getCode());
List<UserContractAmountInfo> list=psContractInfoMapper.getUserContractAndPayInfo(queryParam);
QueryWrapper<PsContractInfo> queryWrapper = new QueryWrapper<PsContractInfo>()
.in(isCaiwu, "role.role_key", Arrays.asList(RoleEnum.caiwu))
.in(!isCaiwu, "role.role_key", Arrays.asList(RoleEnum.xiaoshou));
List<UserContractAmountInfo> list = psContractInfoMapper.getUserContractAndPayInfo(queryParam, queryWrapper);
Map<Long,UserAmountInfoVo> resMap = new HashMap<>();
//记录合同编码防止重复
Map<String, String> repeatContractCode = new HashMap<>();
for (UserContractAmountInfo obj : list) {
Long userId = obj.getUserId();
UserAmountInfoVo vo = resMap.get(userId);
@ -444,14 +510,58 @@ public class HomeServiceImpl implements HomeService {
if(obj.getContractCode() != null && obj.getContractCode().length() > 0){
vo.addContractNum();
}
vo.addSumAmount(obj.getContractAmount());
vo.addPayedSumAmount(obj.getPayedMoney());
if(repeatContractCode.get(obj.getContractCode())==null){
repeatContractCode.put(obj.getContractCode(),obj.getContractCode());
vo.addSumAmount(obj.getContractAmount());
}
//托管合同金额累计
if(obj.getBusinessType() != null && obj.getBusinessType().equals("4")){
// vo.addTuoGuanAmount(obj.getContractAmount());
} else {
//软件开发合同金额累计
if (obj.getBusinessType() != null && obj.getBusinessType().equals("9")) {
vo.addSoftwareDevAmount(obj.getContractAmount());
} else {
//其他合同金额累计
if (obj.getIsDue() == null || obj.getIsDue().equals("0")) {
vo.addOtherAmount(obj.getContractAmount());
}
}
}
//续签合同金额累计
if(obj.getIsDue()!=null&&obj.getIsDue().equals("1")){
vo.addXuFeiAmount(obj.getContractAmount());
}
}
//计算未付款金额
resMap.values().forEach(v->{
v.setUnPaySumAmount(v.getSumAmount().subtract(v.getPayedSumAmount()));
});
return resMap.values();
//按总金额降序处理
List<UserAmountInfoVo> listData = resMap.values().stream().sorted(
Comparator.comparing(UserAmountInfoVo::getSumAmount,Comparator.reverseOrder())).collect(Collectors.toList());
BigDecimal sumAmount = list.stream().map(UserContractAmountInfo::getContractAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
//计算金额占比
for (UserAmountInfoVo v : listData) {
if(!v.getSumAmount().equals(BigDecimal.ZERO)) {
v.setAmountPer(v.getSumAmount().multiply(new BigDecimal("100.0")).divide(sumAmount, 2, RoundingMode.HALF_UP).toPlainString() + "%");
}else {
v.setAmountPer("0.00%");
}
}
UserAmountVo userAmountVo = new UserAmountVo();
userAmountVo.setUserAmountList(resMap.values());
userAmountVo.setDateStr(date);
userAmountVo.setAll(sumAmount);
return userAmountVo;
}
@ -510,6 +620,7 @@ public class HomeServiceImpl implements HomeService {
data.setPayMoney(paymoney);
data.setUnPayMoney(unpaymoney);
data.setType(item);
data.setCost(payList.isEmpty() ? BigDecimal.ZERO : payList.get(0).getCost());
channelList.add(data);
}
res.setChannelList(channelList);
@ -598,20 +709,27 @@ public class HomeServiceImpl implements HomeService {
* @param type
* @return
*/
public Map<String,Object> salasData(Integer type){
public SalasVo salasData(Integer type){
Map<String, Object> mapParam = this.getDateByUser(type);
LocalDate startDate = (LocalDate)mapParam.get("startDate");
LocalDate endDate = (LocalDate)mapParam.get("endDate");
String date = (String)mapParam.get("date");
//返回map
Map<String,Object> map = new HashMap<>();
map.put("dateStr",date);//
map.put("currentDate", DateUtils.parseDateToStr("yyyy-MM-dd HH:mm",new Date()));//当前时间
return null;
Map<String,Object> queryParam = new HashMap<>();
queryParam.put("startDate",startDate);
queryParam.put("endDate",endDate);
SalasVo salasVo = psHomeMapper.selectContractNumAndAmount(queryParam);
salasVo.setGonghaiNum(psHomeMapper.selectGonghaiNum(queryParam));
salasVo.setCallbackRecordNum(psHomeMapper.selectCallbackRecordNum(queryParam));
salasVo.setNoCallbackRecordNum(psHomeMapper.selectNoCallbackRecordNum(queryParam));
salasVo.setPayContractAmount(psHomeMapper.selectSumPayContractAmount(queryParam));
if (salasVo.getSumContractAmount() == null){
salasVo.setUnPayContractAmount(new BigDecimal(0));
}else {
salasVo.setUnPayContractAmount(salasVo.getSumContractAmount().subtract(salasVo.getPayContractAmount() == null ? new BigDecimal(0) : salasVo.getPayContractAmount()));
}
salasVo.setDateStr(date);
salasVo.setCurrentDate(new Date());
return salasVo;
}
public static Map<String, Object> getDateByUser(Integer type){

View File

@ -161,12 +161,11 @@ public class PsCompanyInfoServiceImpl implements IPsCompanyInfoService {
LoginUser user = LoginHelper.getLoginUser();
for (RoleDTO role : user.getRoles()) {
DataScopeType type = DataScopeType.findCode(role.getDataScope());
if (type == DataScopeType.ALL) {
continue;
}
if (type == DataScopeType.SELF){
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);
//合同未作废有回款的续费合同 合同未作废有完成主任务的

View File

@ -133,6 +133,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
FROM sys_user u
LEFT JOIN ps_contract_info info on
u.user_id = info.custom_manager
inner join sys_user_role ur on ur.user_id = u.user_id
inner join sys_role role on role.role_id = ur.role_id
<if test="queryParam.startDate != null">
and info.apply_date >= #{queryParam.startDate}
</if>
@ -146,6 +148,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
info.contract_code=pay.contract_code
and pay.pay_status=#{queryParam.payStatus}
and pay.del_flag=0
${ew.getCustomSqlSegment}
</select>
<!-- 按人员成交数据【转介绍】 -->
@ -156,8 +160,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
IFNULL(info.contract_amount,0) as contractAmount,
info.is_due as isDue,
info.contract_code as contractCode,
cus.custom_source as customSource
cus.custom_source as customSource,
pay.money as payedMoney
FROM sys_user u
inner join sys_user_role ur on ur.user_id = u.user_id
inner join sys_role role on role.role_id = ur.role_id
LEFT JOIN ps_contract_info info on
u.user_id=info.custom_manager
and info.contract_status != #{queryParam.contractStatus}
@ -171,7 +178,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</if>
LEFT JOIN ps_custom_info cus on info.custom_id=cus.id
WHERE u.dept_id=#{queryParam.deptId}
LEFT JOIN ps_contract_pay pay on info.contract_code = pay.contract_code
and pay.pay_status = #{queryParam.payStatus} and pay.del_flag = 0
${ew.getCustomSqlSegment}
</select>
<!-- 按人员成交【转介绍】数据统计饼图 -->
@ -207,10 +216,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
info.contract_code,
info.contract_amount,
pay.business_type,
pay.money
pay.money,
(
select sum(sc.cost) from ps_contract_business_detail bd
left join ps_salary_config sc on sc.service_project = bd.business_project and sc.del_flag = 0
where bd.contract_code = info.contract_code and sc.post_id = up.post_id
) cost
from ps_contract_info info
left join ps_custom_info cus on info.custom_id = cus.id
left join ps_contract_pay pay on info.contract_code = pay.contract_code
left join sys_user_post up on up.user_id = info.custom_manager
</sql>
<select id="byChannel" resultType="com.pusong.business.domain.vo.home.ChannelPayInfo">
<include refid="channel"/>
@ -222,12 +238,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select>
<select id="selectRenewalContract" resultType="com.pusong.business.domain.vo.PsContractBusinessVo">
select
bus.*
from ps_contract_company cc
left join ps_contract_info con on con.contract_code = cc.contract_code
left join ps_contract_business bus on bus.contract_code = con.contract_code and bus.business_type = '2'
</select>
</mapper>

View File

@ -0,0 +1,68 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.pusong.business.mapper.PsHomeMapper">
<select id="selectRenewalContract" resultType="com.pusong.business.domain.vo.PsContractBusinessVo">
select
bus.*
from ps_contract_company cc
inner join ps_contract_info con on con.contract_code = cc.contract_code
inner join ps_contract_business bus on bus.contract_code = con.contract_code and bus.business_type = '2'
${ew.getCustomSqlSegment}
</select>
<select id="selectGonghaiNum" >
select count(1) from ps_custom_info
where custom_status = 2 or custom_status = 20 and black = 0 and del_flag = 0
</select>
<select id="selectCallbackRecordNum">
select count(DISTINCT back.custom_id) from ps_custom_callback back
inner join ps_custom_info cus on back.custom_id = cus.id and cus.black = 0 and cus.del_flag = 0
where
<if test="queryParam.startDate != null">
back.create_time >= #{queryParam.startDate}
</if>
<if test="queryParam.endDate != null">
and back.create_time &lt; #{queryParam.endDate}
</if>
</select>
<select id="selectNoCallbackRecordNum">
select count(1) from ps_custom_info cus
where
not exists (select 1 from ps_custom_callback where custom_id = cus.id)
and cus.black = 0 and cus.del_flag = 0
</select>
<select id="selectContractNumAndAmount" resultType="com.pusong.business.domain.vo.home.SalasVo">
select count(1) contractNum, sum(contract_amount) sumContractAmount
from ps_contract_info info
where
contract_status != 10 and del_flag = 0
<if test="queryParam.startDate != null">
and create_time >= #{queryParam.startDate}
</if>
<if test="queryParam.endDate != null">
and create_time &lt; #{queryParam.endDate}
</if>
</select>
<select id="selectSumPayContractAmount">
select sum(money) from ps_contract_info info
inner join ps_contract_pay pay on pay.contract_code = info.contract_code and pay.business_type = 1 and pay.del_flag = 0
where
info.contract_status != 10 and info.del_flag = 0
<if test="queryParam.startDate != null">
and info.create_time >= #{queryParam.startDate}
</if>
<if test="queryParam.endDate != null">
and info.create_time &lt; #{queryParam.endDate}
</if>
</select>
</mapper>

View File

@ -19,8 +19,9 @@ public enum RoleEnum {
nqzxry("nqzxry","内勤执行人员"),
caiwu("caiwu","财务"),
zongcai("zongcai","总裁"),
topmanage("topmanage","总经理")
topmanage("topmanage","总经理"),
stopacc1("stopaccount","停止代账1"),
stopacc2("cwstopaccount","停止代账2")
;
private String code;

View File

@ -73,9 +73,17 @@ public class SysNoticeController extends BaseController {
@Log(title = "通知公告", businessType = BusinessType.UPDATE)
@PutMapping
public R<Void> edit(@Validated @RequestBody SysNoticeBo notice) {
if (notice.getNoticeId() != null){
return toAjax( noticeService.updateNotice(notice));
}else{
return toAjax(noticeService.readed(notice.getNoticeIds()));
}
}
@Log(title = "公告已读", businessType = BusinessType.UPDATE)
@GetMapping("/readed")
public R<Void> readed(String noticeIds) {
return toAjax(noticeService.readed(noticeIds));
}
/**
* 删除通知公告
*

View File

@ -64,5 +64,8 @@ public class SysNotice extends TenantEntity {
*/
private int jumpType;
/**
* 0未读 1已读
*/
private int readed;
}

View File

@ -26,6 +26,10 @@ import java.util.List;
@AutoMapper(target = SysNotice.class, reverseConvertGenerate = false)
public class SysNoticeBo extends BaseEntity {
/**
* 公告ID
*/
private String noticeIds;
/**
* 公告ID
*/
@ -82,7 +86,10 @@ public class SysNoticeBo extends BaseEntity {
* 跳转类型
*/
private int jumpType;
/**
* 0未读 1已读
*/
private int readed;
public static SysNoticeBo getGonghaiInstance(){
SysNoticeBo noticeBo = new SysNoticeBo();
@ -488,5 +495,14 @@ public class SysNoticeBo extends BaseEntity {
noticeBo.setJumpType(0);
return noticeBo;
}
public static SysNoticeBo getWaitApplyInstance(String applyUserName, String roleKey){
SysNoticeBo noticeBo = new SysNoticeBo();
noticeBo.setNoticeType("1");
noticeBo.setNoticeTitle("通知");
noticeBo.setStatus("0");
noticeBo.setNoticeContent(""+ applyUserName +"】提交的【停止代账审批】待你审批!");
noticeBo.setRecRole(Arrays.asList(roleKey));
noticeBo.setJumpType(0);
return noticeBo;
}
}

View File

@ -1,5 +1,6 @@
package com.pusong.system.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pusong.common.translation.annotation.Translation;
import com.pusong.common.translation.constant.TransConstant;
import com.pusong.system.domain.SysNotice;
@ -52,22 +53,31 @@ public class SysNoticeVo implements Serializable {
/**
* 备注
*/
private String remark;
// private String remark;
/**
* 创建者
*/
private Long createBy;
// /**
// * 创建者
// */
// private Long createBy;
/**
* 创建人名称
*/
@Translation(type = TransConstant.USER_ID_TO_NAME, mapper = "createBy")
private String createByName;
// /**
// * 创建人名称
// */
// @Translation(type = TransConstant.USER_ID_TO_NAME, mapper = "createBy")
// private String createByName;
/**
* 创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
/**
* 跳转类型
*/
private int jumpType;
/**
* 0未读 1已读
*/
private int readed;
}

View File

@ -1,8 +1,11 @@
package com.pusong.system.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.pusong.common.mybatis.core.mapper.BaseMapperPlus;
import com.pusong.system.domain.SysNotice;
import com.pusong.system.domain.vo.SysNoticeVo;
import org.apache.ibatis.annotations.Param;
/**
* 通知公告表 数据层
@ -10,5 +13,6 @@ import com.pusong.system.domain.vo.SysNoticeVo;
* @author Lion Li
*/
public interface SysNoticeMapper extends BaseMapperPlus<SysNotice, SysNoticeVo> {
Integer updateBatchReaded(@Param(Constants.WRAPPER) Wrapper<SysNotice> queryWrapper);
}

View File

@ -49,7 +49,7 @@ public interface ISysNoticeService {
* @return 结果
*/
int updateNotice(SysNoticeBo bo);
int readed(String ids);
/**
* 删除公告信息
*

View File

@ -1,6 +1,7 @@
package com.pusong.system.service.impl;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@ -10,6 +11,7 @@ import com.pusong.common.core.domain.R;
import com.pusong.common.core.service.DictService;
import com.pusong.common.core.utils.MapstructUtils;
import com.pusong.common.core.utils.StringUtils;
import com.pusong.common.json.utils.JsonUtils;
import com.pusong.common.mybatis.core.page.PageQuery;
import com.pusong.common.mybatis.core.page.TableDataInfo;
import com.pusong.common.websocket.dto.WebSocketMessageDto;
@ -149,9 +151,10 @@ public class SysNoticeServiceImpl implements ISysNoticeService {
insertData.add(sysNoticeBo);
}
}
SysNoticeVo vo = MapstructUtils.convert(bo, SysNoticeVo.class);
WebSocketMessageDto webSocketMessage = new WebSocketMessageDto();
webSocketMessage.setMessage(bo.getNoticeContent());
// webSocketMessage.setMessage(bo.getNoticeContent());
webSocketMessage.setMessage(JsonUtils.toJsonString(vo));
webSocketMessage.setSessionKeys(uids);
WebSocketUtils.publishMessage(webSocketMessage);
@ -169,7 +172,14 @@ public class SysNoticeServiceImpl implements ISysNoticeService {
SysNotice notice = MapstructUtils.convert(bo, SysNotice.class);
return baseMapper.updateById(notice);
}
@Override
public int readed(String ids) {
String[] idArr = ids.split(",");
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.in("notice_id", idArr);
baseMapper.updateBatchReaded(queryWrapper);
return 1;
}
/**
* 删除公告对象
*

View File

@ -3,5 +3,9 @@
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.pusong.system.mapper.SysNoticeMapper">
<select id="updateBatchReaded" >
update sys_notice set readed = 1
${ew.getCustomSqlSegment}
</select>
</mapper>