首页统计和通知

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.codec.Base64;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil; 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.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.IAuthStrategy;
import com.pusong.web.service.SysRegisterService; import com.pusong.web.service.SysRegisterService;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
@ -44,6 +52,7 @@ import org.springframework.web.bind.annotation.*;
import java.net.URL; import java.net.URL;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -70,7 +79,7 @@ public class AuthController {
private final ISysSocialService socialUserService; private final ISysSocialService socialUserService;
private final ISysClientService clientService; private final ISysClientService clientService;
private final ScheduledExecutorService scheduledExecutorService; private final ScheduledExecutorService scheduledExecutorService;
private final SysNoticeMapper sysNoticeMapper;
/** /**
* 登录方法 * 登录方法
@ -104,10 +113,23 @@ public class AuthController {
Long userId = LoginHelper.getUserId(); Long userId = LoginHelper.getUserId();
scheduledExecutorService.schedule(() -> { scheduledExecutorService.schedule(() -> {
WebSocketMessageDto dto = new WebSocketMessageDto(); // WebSocketMessageDto dto = new WebSocketMessageDto();
dto.setMessage("欢迎登录pusong-vue-plus后台管理系统"); // 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)); dto.setSessionKeys(List.of(userId));
WebSocketUtils.publishMessage(dto); WebSocketUtils.publishMessage(dto);
}
}, 3, TimeUnit.SECONDS); }, 3, TimeUnit.SECONDS);
return R.ok(loginVo); return R.ok(loginVo);
} }

View File

@ -1,5 +1,7 @@
package com.pusong.common.mybatis.annotation; package com.pusong.common.mybatis.annotation;
import com.pusong.common.mybatis.enums.DataScopeType;
import java.lang.annotation.*; import java.lang.annotation.*;
/** /**
@ -25,4 +27,10 @@ public @interface DataColumn {
*/ */
String[] value() default "dept_id"; 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 @Getter
@AllArgsConstructor @AllArgsConstructor
public enum DataScopeType { 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; private final String code;

View File

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

View File

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

View File

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

View File

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

View File

@ -30,4 +30,20 @@ public class DataAmountVo {
* 未回款金额 * 未回款金额
*/ */
private BigDecimal unPayMoney; 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 Integer contractNum;
/**
* 到期合同总额
*/
private BigDecimal contractAmount;
/** /**
* 已续费合同总数 * 已续费合同总数
*/ */
@ -41,6 +46,14 @@ public class RenewalInfoVo {
*/ */
private BigDecimal unPayMoney; private BigDecimal unPayMoney;
/**
* 已回款客户占比
*/
private String customPer;
/**
* 未回款客户占比
*/
private String unPaycustomPer;
/** /**
* 已回款金额占比 * 已回款金额占比
*/ */

View File

@ -21,6 +21,16 @@ public class ReturnMoneyInfoVo {
* 当月合同总数 * 当月合同总数
*/ */
private Integer contractNum; 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); 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(){ public void addContractNum(){
contractNum++; 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 BigDecimal payedMoney;
/**
* 与其他人合同金额的占比
*/
private String amountPer;
} }

View File

@ -16,22 +16,56 @@ public class UserContractAmountVo {
* 用户名字 * 用户名字
*/ */
private String nickName; private String nickName;
/**
* 与其他人合同金额的占比
*/
private String amountPer;
/**
* 转介绍合同数量
*/
private Integer jieShaoContractNum = 0;
/** /**
* 转介绍合同金额占比 * 转介绍合同金额占比
*/ */
private String jieShaoPer; private String jieShaoPer;
/**
* 其他合同金额占比
*/
private String otherPer;
/** /**
* 用户所有合同总金额 * 用户所有合同总金额
*/ */
private BigDecimal sumAmount = new BigDecimal(0); 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 * 托管类型合同总金额 类型号:4
*/ */
@ -44,14 +78,8 @@ public class UserContractAmountVo {
* 软件定制类型合同总金额 类型号:9 * 软件定制类型合同总金额 类型号:9
*/ */
private BigDecimal softwareDevAmount = new BigDecimal(0); private BigDecimal softwareDevAmount = new BigDecimal(0);
/**
* 其他类型合同总金额
*/
private BigDecimal otherAmount = new BigDecimal(0);
/**
* 转介绍的合同金额
*/
private BigDecimal jieShaoAmount = new BigDecimal(0);
public void addSumAmount(BigDecimal amount){ public void addSumAmount(BigDecimal amount){
sumAmount=sumAmount.add(amount); sumAmount=sumAmount.add(amount);
@ -74,4 +102,24 @@ public class UserContractAmountVo {
public void addJieShaoContractNum() { public void addJieShaoContractNum() {
jieShaoContractNum++; 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.PsCustomInfoVo;
import com.pusong.business.domain.vo.PsSalaryContractVo; import com.pusong.business.domain.vo.PsSalaryContractVo;
import com.pusong.business.domain.vo.home.ChannelPayInfo; 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.business.domain.vo.home.UserContractAmountInfo;
import com.pusong.common.mybatis.annotation.DataColumn; import com.pusong.common.mybatis.annotation.DataColumn;
import com.pusong.common.mybatis.annotation.DataPermission; import com.pusong.common.mybatis.annotation.DataPermission;
import com.pusong.common.mybatis.core.mapper.BaseMapperPlus; import com.pusong.common.mybatis.core.mapper.BaseMapperPlus;
import com.pusong.common.mybatis.enums.DataScopeType;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.time.LocalDate; import java.time.LocalDate;
@ -31,7 +33,8 @@ public interface PsContractInfoMapper extends BaseMapperPlus<PsContractInfo, PsC
@DataPermission({ @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); 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<PsSalaryContract> querySalaryListByCodes(@Param(Constants.WRAPPER) Wrapper<PsContractInfo> queryWrapper);
List<Map<String,Object>> homePageReturnMoneyInfo(@Param("queryParam") Map<String, Object> queryParam); 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> 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<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.DataColumn;
import com.pusong.common.mybatis.annotation.DataPermission; import com.pusong.common.mybatis.annotation.DataPermission;
import com.pusong.common.mybatis.core.mapper.BaseMapperPlus; import com.pusong.common.mybatis.core.mapper.BaseMapperPlus;
import com.pusong.common.mybatis.enums.DataScopeType;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
@ -29,7 +30,7 @@ public interface PsCustomInfoMapper extends BaseMapperPlus<PsCustomInfo, PsCusto
List<PsCustomInfo> selectList(@Param(Constants.WRAPPER) Wrapper<PsCustomInfo> queryWrapper); List<PsCustomInfo> selectList(@Param(Constants.WRAPPER) Wrapper<PsCustomInfo> queryWrapper);
@DataPermission({ @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") @DataColumn(key = "userName", value = "info.custom_manager")
}) })
Page<PsCustomInfoVo> selectPageCustomerList(@Param("page") Page<PsCustomInfo> page, @Param(Constants.WRAPPER) Wrapper<PsCustomInfo> queryWrapper); 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); ReturnMoneyInfoVo returnMoney(Integer type);
RenewalInfoVo renewal(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); List<UserContractAmountVo> getUserContractAmountsByDeptId(Integer type, Long deptId);
Collection<UserAmountInfoVo> getUserContractAndPayInfo(Integer type); UserAmountVo getUserContractAndPayInfo(Integer type, boolean isCaiwu);
/** /**
* 首页大盘数据各渠道成交 * 首页大盘数据各渠道成交
* @param type * @param type
@ -43,5 +43,5 @@ public interface HomeService {
* @param type * @param type
* @return * @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.core.utils.StringUtils;
import com.pusong.common.mybatis.core.page.PageQuery; import com.pusong.common.mybatis.core.page.PageQuery;
import com.pusong.common.satoken.utils.LoginHelper; import com.pusong.common.satoken.utils.LoginHelper;
import com.pusong.system.RoleEnum;
import com.pusong.system.domain.bo.SysNoticeBo; import com.pusong.system.domain.bo.SysNoticeBo;
import com.pusong.system.service.ISysNoticeService; import com.pusong.system.service.ISysNoticeService;
import jakarta.annotation.PostConstruct; import jakarta.annotation.PostConstruct;
@ -86,8 +87,12 @@ public abstract class ApproverAbstractServiceImpl implements ApproverService {
LoginUser loginUser = LoginHelper.getLoginUser(); 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())); noticeService.sendNotice(SysNoticeBo.getWaitApplyInstance(loginUser.getNickname(), approverType().getMenuEnum()));
} }
}
protected abstract ApproverTypeEnum approverType(); protected abstract ApproverTypeEnum approverType();
@PostConstruct @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.DateUtils;
import com.pusong.common.core.utils.StringUtils; import com.pusong.common.core.utils.StringUtils;
import com.pusong.common.mybatis.core.page.PageQuery; 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.bo.SysNoticeBo;
import com.pusong.system.domain.vo.SysUserVo;
import com.pusong.system.service.ISysNoticeService; import com.pusong.system.service.ISysNoticeService;
import com.pusong.system.service.ISysUserService;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -53,6 +56,8 @@ public class StopAccountServiceImpl extends ApproverAbstractServiceImpl {
private final IPsCompanyInfoService psCompanyInfoService; private final IPsCompanyInfoService psCompanyInfoService;
private final ISysNoticeService noticeService; private final ISysNoticeService noticeService;
private final ISysUserService userService;
@Override @Override
public void success(PsApproverRecord psApproverRecord) { public void success(PsApproverRecord psApproverRecord) {
if (ApproverStepEnum.INIT.getCode().equals(psApproverRecord.getUpdateData())){ if (ApproverStepEnum.INIT.getCode().equals(psApproverRecord.getUpdateData())){
@ -62,6 +67,9 @@ public class StopAccountServiceImpl extends ApproverAbstractServiceImpl {
PsCompanyInfoVo psCompanyInfoVo = psCompanyInfoService.queryById(Long.valueOf(psApproverRecord.getBusinessId())); PsCompanyInfoVo psCompanyInfoVo = psCompanyInfoService.queryById(Long.valueOf(psApproverRecord.getBusinessId()));
noticeService.sendNotice(SysNoticeBo.getStopAccount1Instance(psApproverRecord.getCreateBy(), psCompanyInfoVo.getCompanyName())); noticeService.sendNotice(SysNoticeBo.getStopAccount1Instance(psApproverRecord.getCreateBy(), psCompanyInfoVo.getCompanyName()));
SysUserVo sysUserVo = userService.selectUserById(psApproverRecord.getCreateBy());
noticeService.sendNotice(SysNoticeBo.getWaitApplyInstance(sysUserVo.getNickName(), RoleEnum.stopacc1.getCode()));
return; return;
} }
if (ApproverStepEnum.CW_APPLY.getCode().equals(psApproverRecord.getUpdateData())){ 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.business.service.HomeService;
import com.pusong.common.core.constant.CacheNames; import com.pusong.common.core.constant.CacheNames;
import com.pusong.common.core.utils.DateUtils; import com.pusong.common.core.utils.DateUtils;
import com.pusong.system.RoleEnum;
import com.pusong.system.domain.bo.SysDictDataBo; import com.pusong.system.domain.bo.SysDictDataBo;
import com.pusong.system.domain.vo.SysDictDataVo; import com.pusong.system.domain.vo.SysDictDataVo;
import com.pusong.system.service.ISysDictDataService; import com.pusong.system.service.ISysDictDataService;
@ -38,7 +39,7 @@ import java.util.stream.Collectors;
public class HomeServiceImpl implements HomeService { public class HomeServiceImpl implements HomeService {
private static final Logger log = LoggerFactory.getLogger(HomeServiceImpl.class); private static final Logger log = LoggerFactory.getLogger(HomeServiceImpl.class);
private final PsHomeMapper psHomeMapper;
private final PsContractInfoMapper psContractInfoMapper; private final PsContractInfoMapper psContractInfoMapper;
private final PsContractPayMapper payMapper; private final PsContractPayMapper payMapper;
private final PsTaskMainMapper taskMainMapper; private final PsTaskMainMapper taskMainMapper;
@ -47,7 +48,7 @@ public class HomeServiceImpl implements HomeService {
private final ISysDictDataService dictDataService; private final ISysDictDataService dictDataService;
private final PsContractBusinessMapper psContractBusinessMapper; private final PsContractBusinessMapper psContractBusinessMapper;
private final PsCustomInfoMapper psCustomInfoMapper;
/** /**
* 查询成交总金额 * 查询成交总金额
@ -61,7 +62,7 @@ public class HomeServiceImpl implements HomeService {
LocalDate endDate = (LocalDate)mapParam.get("endDate"); LocalDate endDate = (LocalDate)mapParam.get("endDate");
String date = (String)mapParam.get("date"); String date = (String)mapParam.get("date");
log.info("查询日期:{}到{}",startDate,endDate); log.info("查询日期:{}到{}", startDate, endDate);
List<PsContractInfo> list = psContractInfoMapper.selectList(Wrappers.<PsContractInfo>lambdaQuery() List<PsContractInfo> list = psContractInfoMapper.selectList(Wrappers.<PsContractInfo>lambdaQuery()
.select(PsContractInfo::getContractCode, PsContractInfo::getIsDue, PsContractInfo::getContractAmount) .select(PsContractInfo::getContractCode, PsContractInfo::getIsDue, PsContractInfo::getContractAmount)
.ne(PsContractInfo::getIsCancel, CommonStatusEnum.SUCCESS.getCode()) .ne(PsContractInfo::getIsCancel, CommonStatusEnum.SUCCESS.getCode())
@ -122,12 +123,12 @@ public class HomeServiceImpl implements HomeService {
switch (type){ switch (type){
case 1://本月 case 1://本月
startDate = now.withDayOfMonth(1); startDate = now.withDayOfMonth(1);
date =startDate.format(df); date = startDate.format(df);
break; break;
case 2: //上月 case 2: //上月
startDate = now.minusMonths(1).withDayOfMonth(1); startDate = now.minusMonths(1).withDayOfMonth(1);
endDate = now.withDayOfMonth(1); endDate = now.withDayOfMonth(1);
date =startDate.format(df); date = startDate.format(df);
break; break;
case 3: //本季度 case 3: //本季度
int month = (now.getMonthValue()-1) / 3 * 3 + 1; int month = (now.getMonthValue()-1) / 3 * 3 + 1;
@ -163,6 +164,8 @@ public class HomeServiceImpl implements HomeService {
//当月合同款总数 //当月合同款总数
BigDecimal sumMoney= new BigDecimal(0); BigDecimal sumMoney= new BigDecimal(0);
//回款合同数
Integer payNum = 0;
//当月已支付合同金额 //当月已支付合同金额
BigDecimal payMoney=new BigDecimal(0); BigDecimal payMoney=new BigDecimal(0);
//当月合同总数 //当月合同总数
@ -193,14 +196,21 @@ public class HomeServiceImpl implements HomeService {
String contractCode=m.get("contract_code").toString(); String contractCode=m.get("contract_code").toString();
if(repeatNum.get(contractCode)==null){ if(repeatNum.get(contractCode)==null){
repeatNum.put(contractCode,1); repeatNum.put(contractCode,1);
sumMoney=sumMoney.add((BigDecimal) m.get("contract_amount")); sumMoney = sumMoney.add((BigDecimal) m.get("contract_amount"));
contractNum++; contractNum++;
if(businessType.equals("1")){
payMoney = payMoney.add(money);
payNum++;
}
} }
} }
ReturnMoneyInfoVo res = new ReturnMoneyInfoVo(); ReturnMoneyInfoVo res = new ReturnMoneyInfoVo();
res.setDateStr(date); res.setDateStr(date);
res.setContractNum(contractNum); res.setContractNum(contractNum);
res.setReturnContractNum(payNum);
res.setNoContractNum(contractNum - payNum);
res.setSumMoney(sumMoney); res.setSumMoney(sumMoney);
res.setPayMoney(payMoney); res.setPayMoney(payMoney);
res.setUnPayMoney(sumMoney.subtract(payMoney)); res.setUnPayMoney(sumMoney.subtract(payMoney));
@ -217,47 +227,69 @@ public class HomeServiceImpl implements HomeService {
String date = (String)mapParam.get("date"); String date = (String)mapParam.get("date");
QueryWrapper<PsContractBusiness> wrapper = new QueryWrapper<PsContractBusiness>() QueryWrapper<PsContractBusiness> wrapper = new QueryWrapper<PsContractBusiness>()
.select("company_id", "contract_code", "sum(business_amount) as business_amount")
.eq("business_type", "2") .eq("business_type", "2")
.between("end_date", startDate, endDate) .between("end_date", startDate, endDate)
.ge(startDate != null,"end_date", startDate)
.le(endDate != null,"end_date", endDate)
.groupBy("company_id") .groupBy("company_id")
.groupBy("contract_code"); .groupBy("contract_code");
//到期的合同 //到期的合同
List<PsContractBusiness> expireContact = psContractBusinessMapper.selectList(wrapper); 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<Long> companyIds = expireContact.stream().map(PsContractBusiness::getCompanyId).toList();
List<String> contractCodeList = expireContact.stream().map(PsContractBusiness::getContractCode).toList(); List<String> contractCodeList = expireContact.stream().map(PsContractBusiness::getContractCode).toList();
//总到期金额 //总到期金额
BigDecimal sumExpireAmount = expireContact.stream().map(PsContractBusiness::getBusinessAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO); BigDecimal sumExpireAmount = expireContact.stream().map(PsContractBusiness::getBusinessAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
QueryWrapper<PsContractInfo> contractWrapper = new QueryWrapper<PsContractInfo>() 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) .eq("con.is_due", 1)
.in("cc.company_id", companyIds) .in("cc.company_id", companyIds)
.notIn("cc.contract_code", contractCodeList); .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); BigDecimal sumRenewalAmount = renewalContact.stream().map(PsContractBusinessVo::getBusinessAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
RenewalInfoVo renewalInfoVo = new RenewalInfoVo(); RenewalInfoVo renewalInfoVo = new RenewalInfoVo();
renewalInfoVo.setContractNum(expireContact.size()); renewalInfoVo.setContractNum(expireContact.size());
renewalInfoVo.setContractAmount(sumExpireAmount);
renewalInfoVo.setRenewalContractNum(renewalContact.size()); renewalInfoVo.setRenewalContractNum(renewalContact.size());
renewalInfoVo.setUnRenewalContractNum(contractCodeList.size() - renewalContact.size()); renewalInfoVo.setUnRenewalContractNum(contractCodeList.size() - renewalContact.size());
renewalInfoVo.setPayMoney(sumRenewalAmount); renewalInfoVo.setPayMoney(sumRenewalAmount);
renewalInfoVo.setUnPayMoney(sumExpireAmount.subtract(sumRenewalAmount)); renewalInfoVo.setUnPayMoney(sumExpireAmount.subtract(sumRenewalAmount));
renewalInfoVo.setDateStr(date); 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.setPayMoneyPer(renewalInfoVo.getPayMoney().divide(sumExpireAmount, 2, BigDecimal.ROUND_UP).toString());
renewalInfoVo.setUnPayMoneyPer(renewalInfoVo.getUnPayMoney().divide(sumExpireAmount, 2, BigDecimal.ROUND_UP).toString()); renewalInfoVo.setUnPayMoneyPer(renewalInfoVo.getUnPayMoney().divide(sumExpireAmount, 2, BigDecimal.ROUND_UP).toString());
return renewalInfoVo; return renewalInfoVo;
} }
private String contractSource="转介绍"; private String contractSource = "转介绍";
/** /**
* 按人员成交转介绍列表根据部门获取 * 按人员成交转介绍列表根据部门获取
* @param type * @param type
* @param deptId * @param isCaiwu
* @return * @return
*/ */
public List<UserContractAmountVo> getUserContractSourceAmountsByDeptId(Integer type, Long deptId){ public UserAmountVo getUserContractSourceAmountsByDeptId(Integer type, boolean isCaiwu){
Map<String, Object> mapParam = this.getDate(type); Map<String, Object> mapParam = this.getDate(type);
LocalDate startDate = (LocalDate)mapParam.get("startDate"); LocalDate startDate = (LocalDate)mapParam.get("startDate");
LocalDate endDate = (LocalDate)mapParam.get("endDate"); LocalDate endDate = (LocalDate)mapParam.get("endDate");
@ -268,13 +300,21 @@ public class HomeServiceImpl implements HomeService {
queryParam.put("endDate",endDate); queryParam.put("endDate",endDate);
queryParam.put("contractStatus",ContractStatusEnum.INIT.getCode()); queryParam.put("contractStatus",ContractStatusEnum.INIT.getCode());
queryParam.put("isCancel",CommonStatusEnum.SUCCESS.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<>(); Map<Long,UserContractAmountVo> res = new HashMap<>();
// BigDecimal sumPayAmount = new BigDecimal(0);
//记录合同编码防止重复 //记录合同编码防止重复
Map<String,String> repeatContractCode = new HashMap<>(); Map<String,String> repeatContractCode = new HashMap<>();
for(UserContractAmountInfo obj:list){
UserContractAmountVo daPan = new UserContractAmountVo();
for(UserContractAmountInfo obj : list){
UserContractAmountVo vo=res.get(obj.getUserId()); UserContractAmountVo vo=res.get(obj.getUserId());
if(vo==null){ if(vo==null){
vo=new UserContractAmountVo(); vo=new UserContractAmountVo();
@ -286,42 +326,64 @@ public class HomeServiceImpl implements HomeService {
if(repeatContractCode.get(obj.getContractCode())==null){ if(repeatContractCode.get(obj.getContractCode())==null){
repeatContractCode.put(obj.getContractCode(),obj.getContractCode()); repeatContractCode.put(obj.getContractCode(),obj.getContractCode());
vo.addSumAmount(obj.getContractAmount()); vo.addSumAmount(obj.getContractAmount());
} daPan.addSumAmount(obj.getContractAmount());
//判断是否为转介绍合同
if(contractSource.equals(obj.getCustomSource())){ if(contractSource.equals(obj.getCustomSource())){
vo.addJieShaoAmount(obj.getContractAmount()); vo.addJieShaoAmount(obj.getContractAmount());
vo.addJieShaoContractNum(); vo.addJieShaoContractNum();
daPan.addJieShaoAmount(obj.getContractAmount());
daPan.addJieShaoContractNum();
}else { }else {
vo.addOtherAmount(obj.getContractAmount()); 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("总计"); res.values().forEach(v->{
title.setDateStr(date); v.setJsUnPaySumAmount(v.getSumAmount().subtract(v.getJsPayedSumAmount()));
title.setOtherAmount(null); });
title.setSoftwareDevAmount(null);
title.setTuoGuanAmount(null);
title.setXuFeiAmount(null);
//按总金额降序处理 //按总金额降序处理
List<UserContractAmountVo> listData=res.values().stream().sorted( List<UserContractAmountVo> listData = res.values().stream().sorted(
Comparator.comparing(UserContractAmountVo::getSumAmount,Comparator.reverseOrder())).collect(Collectors.toList()); Comparator.comparing(UserContractAmountVo::getSumAmount,Comparator.reverseOrder())).collect(Collectors.toList());
for (UserContractAmountVo v:listData) {
title.addSumAmount(v.getSumAmount());
}
//计算转介绍金额占比 //计算转介绍金额占比
for (UserContractAmountVo v:listData) { for (UserContractAmountVo v : listData) {
if(!BigDecimal.ZERO.equals(v.getJieShaoAmount())) { if(!BigDecimal.ZERO.equals(v.getJieShaoAmount())) {
v.setJieShaoPer(v.getJieShaoAmount().multiply(new BigDecimal("100.0")).divide(v.getSumAmount(), 2, RoundingMode.HALF_UP).toPlainString() + "%"); v.setJieShaoPer(v.getJieShaoAmount().multiply(new BigDecimal("100.0")).divide(v.getSumAmount(), 2, RoundingMode.HALF_UP).toPlainString() + "%");
}else { }else {
v.setJieShaoPer("0.00%"); v.setJieShaoPer("0.00%");
} }
} }
listData.add(0,title); if (BigDecimal.ZERO.equals(daPan.getSumAmount())){
return listData; 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")){ if(obj.getIsDue()!=null&&obj.getIsDue().equals("1")){
vo.addXuFeiAmount(obj.getContractAmount()); vo.addXuFeiAmount(obj.getContractAmount());
} }
} }
//构建表格第一行数据 //构建表格第一行数据
@ -415,43 +476,92 @@ public class HomeServiceImpl implements HomeService {
* @param type * @param type
* @return * @return
*/ */
public Collection<UserAmountInfoVo> getUserContractAndPayInfo(Integer type){ public UserAmountVo getUserContractAndPayInfo(Integer type, boolean isCaiwu){
Map<String, Object> mapParam = this.getDate(type); Map<String, Object> mapParam = this.getDate(type);
LocalDate startDate = (LocalDate)mapParam.get("startDate"); LocalDate startDate = (LocalDate)mapParam.get("startDate");
LocalDate endDate = (LocalDate)mapParam.get("endDate"); LocalDate endDate = (LocalDate)mapParam.get("endDate");
String date = (String)mapParam.get("date"); String date = (String)mapParam.get("date");
Map<String,Object> queryParam=new HashMap<>(); Map<String,Object> queryParam=new HashMap<>();
queryParam.put("startDate",startDate); queryParam.put("startDate", startDate);
queryParam.put("endDate",endDate); queryParam.put("endDate", endDate);
queryParam.put("contractStatus",ContractStatusEnum.INIT.getCode()); queryParam.put("contractStatus", ContractStatusEnum.INIT.getCode());
queryParam.put("isCancel",CommonStatusEnum.SUCCESS.getCode()); queryParam.put("isCancel", CommonStatusEnum.SUCCESS.getCode());
queryParam.put("payStatus",PayStatusEnum.SUCCESS.getCode()); queryParam.put("payStatus", PayStatusEnum.SUCCESS.getCode());
List<UserContractAmountInfo> list=psContractInfoMapper.getUserContractAndPayInfo(queryParam); QueryWrapper<PsContractInfo> queryWrapper = new QueryWrapper<PsContractInfo>()
Map<Long,UserAmountInfoVo> resMap=new HashMap<>(); .in(isCaiwu, "role.role_key", Arrays.asList(RoleEnum.caiwu))
for (UserContractAmountInfo obj:list) { .in(!isCaiwu, "role.role_key", Arrays.asList(RoleEnum.xiaoshou));
Long userId=obj.getUserId(); List<UserContractAmountInfo> list = psContractInfoMapper.getUserContractAndPayInfo(queryParam, queryWrapper);
UserAmountInfoVo vo= resMap.get(userId); Map<Long,UserAmountInfoVo> resMap = new HashMap<>();
if(vo==null){ //记录合同编码防止重复
vo=new UserAmountInfoVo(); Map<String, String> repeatContractCode = new HashMap<>();
for (UserContractAmountInfo obj : list) {
Long userId = obj.getUserId();
UserAmountInfoVo vo = resMap.get(userId);
if(vo == null){
vo = new UserAmountInfoVo();
vo.setUserId(userId); vo.setUserId(userId);
vo.setNickName(obj.getNickName()); vo.setNickName(obj.getNickName());
vo.setDateStr(date); vo.setDateStr(date);
resMap.put(userId, vo); resMap.put(userId, vo);
} }
//累计合同数量 //累计合同数量
if(obj.getContractCode()!=null&&obj.getContractCode().length()>0){ if(obj.getContractCode() != null && obj.getContractCode().length() > 0){
vo.addContractNum(); vo.addContractNum();
} }
vo.addSumAmount(obj.getContractAmount());
vo.addPayedSumAmount(obj.getPayedMoney()); 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->{ resMap.values().forEach(v->{
v.setUnPaySumAmount(v.getSumAmount().subtract(v.getPayedSumAmount())); 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;
} }
@ -463,7 +573,7 @@ public class HomeServiceImpl implements HomeService {
*/ */
@Cacheable(cacheNames = CacheNames.HOME_C, key = "#type+'_'+#dateType") @Cacheable(cacheNames = CacheNames.HOME_C, key = "#type+'_'+#dateType")
public ChannelAmountVo byChannel(Integer type,Integer dateType){ public ChannelAmountVo byChannel(Integer type,Integer dateType){
Map<String, Object> mapParam = dateType == 1?this.getDate(type):this.getDateByUser(type); Map<String, Object> mapParam = dateType == 1 ? this.getDate(type) : this.getDateByUser(type);
LocalDate startDate = (LocalDate)mapParam.get("startDate"); LocalDate startDate = (LocalDate)mapParam.get("startDate");
LocalDate endDate = (LocalDate)mapParam.get("endDate"); LocalDate endDate = (LocalDate)mapParam.get("endDate");
String date = (String)mapParam.get("date"); String date = (String)mapParam.get("date");
@ -510,6 +620,7 @@ public class HomeServiceImpl implements HomeService {
data.setPayMoney(paymoney); data.setPayMoney(paymoney);
data.setUnPayMoney(unpaymoney); data.setUnPayMoney(unpaymoney);
data.setType(item); data.setType(item);
data.setCost(payList.isEmpty() ? BigDecimal.ZERO : payList.get(0).getCost());
channelList.add(data); channelList.add(data);
} }
res.setChannelList(channelList); res.setChannelList(channelList);
@ -598,20 +709,27 @@ public class HomeServiceImpl implements HomeService {
* @param type * @param type
* @return * @return
*/ */
public Map<String,Object> salasData(Integer type){ public SalasVo salasData(Integer type){
Map<String, Object> mapParam = this.getDateByUser(type); Map<String, Object> mapParam = this.getDateByUser(type);
LocalDate startDate = (LocalDate)mapParam.get("startDate"); LocalDate startDate = (LocalDate)mapParam.get("startDate");
LocalDate endDate = (LocalDate)mapParam.get("endDate"); LocalDate endDate = (LocalDate)mapParam.get("endDate");
String date = (String)mapParam.get("date"); String date = (String)mapParam.get("date");
Map<String,Object> queryParam = new HashMap<>();
queryParam.put("startDate",startDate);
queryParam.put("endDate",endDate);
SalasVo salasVo = psHomeMapper.selectContractNumAndAmount(queryParam);
//返回map salasVo.setGonghaiNum(psHomeMapper.selectGonghaiNum(queryParam));
Map<String,Object> map = new HashMap<>(); salasVo.setCallbackRecordNum(psHomeMapper.selectCallbackRecordNum(queryParam));
map.put("dateStr",date);// salasVo.setNoCallbackRecordNum(psHomeMapper.selectNoCallbackRecordNum(queryParam));
map.put("currentDate", DateUtils.parseDateToStr("yyyy-MM-dd HH:mm",new Date()));//当前时间 salasVo.setPayContractAmount(psHomeMapper.selectSumPayContractAmount(queryParam));
return null; 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){ public static Map<String, Object> getDateByUser(Integer type){

View File

@ -161,12 +161,11 @@ public class PsCompanyInfoServiceImpl implements IPsCompanyInfoService {
LoginUser user = LoginHelper.getLoginUser(); LoginUser user = LoginHelper.getLoginUser();
for (RoleDTO role : user.getRoles()) { for (RoleDTO role : user.getRoles()) {
DataScopeType type = DataScopeType.findCode(role.getDataScope()); DataScopeType type = DataScopeType.findCode(role.getDataScope());
if (type == DataScopeType.ALL) { if (type == DataScopeType.SELF){
continue;
}
followUserSql += " and fsu.user_id = " + user.getUserId(); followUserSql += " and fsu.user_id = " + user.getUserId();
break; 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.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

@ -132,7 +132,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
pay.money as payedMoney pay.money as payedMoney
FROM sys_user u FROM sys_user u
LEFT JOIN ps_contract_info info on LEFT JOIN ps_contract_info info on
u.user_id=info.custom_manager 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"> <if test="queryParam.startDate != null">
and info.apply_date >= #{queryParam.startDate} and info.apply_date >= #{queryParam.startDate}
</if> </if>
@ -146,6 +148,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
info.contract_code=pay.contract_code info.contract_code=pay.contract_code
and pay.pay_status=#{queryParam.payStatus} and pay.pay_status=#{queryParam.payStatus}
and pay.del_flag=0 and pay.del_flag=0
${ew.getCustomSqlSegment}
</select> </select>
<!-- 按人员成交数据【转介绍】 --> <!-- 按人员成交数据【转介绍】 -->
@ -156,8 +160,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
IFNULL(info.contract_amount,0) as contractAmount, IFNULL(info.contract_amount,0) as contractAmount,
info.is_due as isDue, info.is_due as isDue,
info.contract_code as contractCode, info.contract_code as contractCode,
cus.custom_source as customSource cus.custom_source as customSource,
pay.money as payedMoney
FROM sys_user u 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 LEFT JOIN ps_contract_info info on
u.user_id=info.custom_manager u.user_id=info.custom_manager
and info.contract_status != #{queryParam.contractStatus} and info.contract_status != #{queryParam.contractStatus}
@ -171,7 +178,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</if> </if>
LEFT JOIN ps_custom_info cus on info.custom_id=cus.id 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> </select>
<!-- 按人员成交【转介绍】数据统计饼图 --> <!-- 按人员成交【转介绍】数据统计饼图 -->
@ -207,10 +216,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
info.contract_code, info.contract_code,
info.contract_amount, info.contract_amount,
pay.business_type, 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 from ps_contract_info info
left join ps_custom_info cus on info.custom_id = cus.id 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 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> </sql>
<select id="byChannel" resultType="com.pusong.business.domain.vo.home.ChannelPayInfo"> <select id="byChannel" resultType="com.pusong.business.domain.vo.home.ChannelPayInfo">
<include refid="channel"/> <include refid="channel"/>
@ -222,12 +238,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select> </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> </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","内勤执行人员"), nqzxry("nqzxry","内勤执行人员"),
caiwu("caiwu","财务"), caiwu("caiwu","财务"),
zongcai("zongcai","总裁"), zongcai("zongcai","总裁"),
topmanage("topmanage","总经理") topmanage("topmanage","总经理"),
stopacc1("stopaccount","停止代账1"),
stopacc2("cwstopaccount","停止代账2")
; ;
private String code; private String code;

View File

@ -73,9 +73,17 @@ public class SysNoticeController extends BaseController {
@Log(title = "通知公告", businessType = BusinessType.UPDATE) @Log(title = "通知公告", businessType = BusinessType.UPDATE)
@PutMapping @PutMapping
public R<Void> edit(@Validated @RequestBody SysNoticeBo notice) { public R<Void> edit(@Validated @RequestBody SysNoticeBo notice) {
return toAjax(noticeService.updateNotice(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; private int jumpType;
/**
* 0未读 1已读
*/
private int readed;
} }

View File

@ -26,6 +26,10 @@ import java.util.List;
@AutoMapper(target = SysNotice.class, reverseConvertGenerate = false) @AutoMapper(target = SysNotice.class, reverseConvertGenerate = false)
public class SysNoticeBo extends BaseEntity { public class SysNoticeBo extends BaseEntity {
/**
* 公告ID
*/
private String noticeIds;
/** /**
* 公告ID * 公告ID
*/ */
@ -82,7 +86,10 @@ public class SysNoticeBo extends BaseEntity {
* 跳转类型 * 跳转类型
*/ */
private int jumpType; private int jumpType;
/**
* 0未读 1已读
*/
private int readed;
public static SysNoticeBo getGonghaiInstance(){ public static SysNoticeBo getGonghaiInstance(){
SysNoticeBo noticeBo = new SysNoticeBo(); SysNoticeBo noticeBo = new SysNoticeBo();
@ -488,5 +495,14 @@ public class SysNoticeBo extends BaseEntity {
noticeBo.setJumpType(0); noticeBo.setJumpType(0);
return noticeBo; 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; package com.pusong.system.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pusong.common.translation.annotation.Translation; import com.pusong.common.translation.annotation.Translation;
import com.pusong.common.translation.constant.TransConstant; import com.pusong.common.translation.constant.TransConstant;
import com.pusong.system.domain.SysNotice; 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") // @Translation(type = TransConstant.USER_ID_TO_NAME, mapper = "createBy")
private String createByName; // private String createByName;
/** /**
* 创建时间 * 创建时间
*/ */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime; private Date createTime;
/**
* 跳转类型
*/
private int jumpType;
/**
* 0未读 1已读
*/
private int readed;
} }

View File

@ -1,8 +1,11 @@
package com.pusong.system.mapper; 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.common.mybatis.core.mapper.BaseMapperPlus;
import com.pusong.system.domain.SysNotice; import com.pusong.system.domain.SysNotice;
import com.pusong.system.domain.vo.SysNoticeVo; 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 * @author Lion Li
*/ */
public interface SysNoticeMapper extends BaseMapperPlus<SysNotice, SysNoticeVo> { 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 结果 * @return 结果
*/ */
int updateNotice(SysNoticeBo bo); int updateNotice(SysNoticeBo bo);
int readed(String ids);
/** /**
* 删除公告信息 * 删除公告信息
* *

View File

@ -1,6 +1,7 @@
package com.pusong.system.service.impl; package com.pusong.system.service.impl;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 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.service.DictService;
import com.pusong.common.core.utils.MapstructUtils; import com.pusong.common.core.utils.MapstructUtils;
import com.pusong.common.core.utils.StringUtils; 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.PageQuery;
import com.pusong.common.mybatis.core.page.TableDataInfo; import com.pusong.common.mybatis.core.page.TableDataInfo;
import com.pusong.common.websocket.dto.WebSocketMessageDto; import com.pusong.common.websocket.dto.WebSocketMessageDto;
@ -149,9 +151,10 @@ public class SysNoticeServiceImpl implements ISysNoticeService {
insertData.add(sysNoticeBo); insertData.add(sysNoticeBo);
} }
} }
SysNoticeVo vo = MapstructUtils.convert(bo, SysNoticeVo.class);
WebSocketMessageDto webSocketMessage = new WebSocketMessageDto(); WebSocketMessageDto webSocketMessage = new WebSocketMessageDto();
webSocketMessage.setMessage(bo.getNoticeContent()); // webSocketMessage.setMessage(bo.getNoticeContent());
webSocketMessage.setMessage(JsonUtils.toJsonString(vo));
webSocketMessage.setSessionKeys(uids); webSocketMessage.setSessionKeys(uids);
WebSocketUtils.publishMessage(webSocketMessage); WebSocketUtils.publishMessage(webSocketMessage);
@ -169,7 +172,14 @@ public class SysNoticeServiceImpl implements ISysNoticeService {
SysNotice notice = MapstructUtils.convert(bo, SysNotice.class); SysNotice notice = MapstructUtils.convert(bo, SysNotice.class);
return baseMapper.updateById(notice); 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" PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.pusong.system.mapper.SysNoticeMapper"> <mapper namespace="com.pusong.system.mapper.SysNoticeMapper">
<select id="updateBatchReaded" >
update sys_notice set readed = 1
${ew.getCustomSqlSegment}
</select>
</mapper> </mapper>