Merge branch 'main' of http://192.168.18.119:88/pusong/pusong-crm into main
This commit is contained in:
commit
b5dac8999f
@ -63,7 +63,7 @@ public class HomeController extends BaseController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 首页大盘数据:人员合同金额统计
|
* 首页大盘数据:人员成交数据列表
|
||||||
* @param type 1本月 2上月 3本季度 4本年 5所有
|
* @param type 1本月 2上月 3本季度 4本年 5所有
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@ -72,6 +72,27 @@ public class HomeController extends BaseController {
|
|||||||
public R<List> getUserContractAmounts(@RequestParam() Integer type, @RequestParam() Long deptId) {
|
public R<List> getUserContractAmounts(@RequestParam() Integer type, @RequestParam() Long deptId) {
|
||||||
return R.ok(homeService.getUserContractAmountsByDeptId(type,deptId));
|
return R.ok(homeService.getUserContractAmountsByDeptId(type,deptId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 首页大盘数据:人员转介绍成交数据列表
|
||||||
|
* @param type 1本月 2上月 3本季度 4本年 5所有
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@SaCheckPermission("business:salary:list")
|
||||||
|
@GetMapping("/getUserContractSourceAmounts")
|
||||||
|
public R<Object> getUserContractSourceAmounts(@RequestParam() Integer type, @RequestParam() Long deptId){
|
||||||
|
return R.ok(homeService.getUserContractSourceAmountsByDeptId(type,deptId));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 首页大盘数据:人员成交数据饼图
|
||||||
|
* @param type
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@GetMapping("/getUserContractAndPayInfo")
|
||||||
|
public R<Object> getUserContractAndPayInfo(@RequestParam() Integer type){
|
||||||
|
return R.ok(homeService.getUserContractAndPayInfo(type));
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* 首页大盘数据:各渠道成交(公司总数居)
|
* 首页大盘数据:各渠道成交(公司总数居)
|
||||||
* @param type 1本月 2上月 3本季度 4本年 5所有
|
* @param type 1本月 2上月 3本季度 4本年 5所有
|
||||||
|
@ -0,0 +1,47 @@
|
|||||||
|
package com.pusong.business.domain.vo.home;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class UserAmountInfoVo {
|
||||||
|
/**
|
||||||
|
* 用户id
|
||||||
|
*/
|
||||||
|
private Long userId;
|
||||||
|
|
||||||
|
private String dateStr;
|
||||||
|
/**
|
||||||
|
* 用户名字
|
||||||
|
*/
|
||||||
|
private String nickName;
|
||||||
|
/**
|
||||||
|
* 合同数量
|
||||||
|
*/
|
||||||
|
private Integer contractNum=0;
|
||||||
|
/**
|
||||||
|
* 合同总金额
|
||||||
|
*/
|
||||||
|
private BigDecimal sumAmount=new BigDecimal(0);
|
||||||
|
/**
|
||||||
|
* 已支付总金额
|
||||||
|
*/
|
||||||
|
private BigDecimal payedSumAmount=new BigDecimal(0);
|
||||||
|
/**
|
||||||
|
* 未支付金额
|
||||||
|
*/
|
||||||
|
private BigDecimal unPaySumAmount=new BigDecimal(0);
|
||||||
|
|
||||||
|
public void addContractNum(){
|
||||||
|
contractNum++;
|
||||||
|
}
|
||||||
|
public void addSumAmount(BigDecimal amount){
|
||||||
|
if(amount==null){return;}
|
||||||
|
sumAmount=sumAmount.add(amount);
|
||||||
|
}
|
||||||
|
public void addPayedSumAmount(BigDecimal amount){
|
||||||
|
if(amount==null){return;}
|
||||||
|
payedSumAmount=payedSumAmount.add(amount);
|
||||||
|
}
|
||||||
|
}
|
@ -26,8 +26,16 @@ public class UserContractAmountInfo {
|
|||||||
* 合同类型
|
* 合同类型
|
||||||
*/
|
*/
|
||||||
private String businessType;
|
private String businessType;
|
||||||
|
/**
|
||||||
|
* 客户来源
|
||||||
|
*/
|
||||||
|
private String customSource;
|
||||||
/**
|
/**
|
||||||
* 合同价格
|
* 合同价格
|
||||||
*/
|
*/
|
||||||
private BigDecimal contractAmount;
|
private BigDecimal contractAmount;
|
||||||
|
/**
|
||||||
|
* 已付款金额
|
||||||
|
*/
|
||||||
|
private BigDecimal payedMoney;
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,14 @@ public class UserContractAmountVo {
|
|||||||
* 与其他人合同金额的占比
|
* 与其他人合同金额的占比
|
||||||
*/
|
*/
|
||||||
private String amountPer;
|
private String amountPer;
|
||||||
|
/**
|
||||||
|
* 转介绍合同数量
|
||||||
|
*/
|
||||||
|
private Integer jieShaoContractNum=0;
|
||||||
|
/**
|
||||||
|
* 转介绍合同金额占比
|
||||||
|
*/
|
||||||
|
private String jieShaoPer;
|
||||||
/**
|
/**
|
||||||
* 用户所有合同总金额
|
* 用户所有合同总金额
|
||||||
*/
|
*/
|
||||||
@ -40,6 +48,10 @@ public class UserContractAmountVo {
|
|||||||
* 其他类型合同总金额
|
* 其他类型合同总金额
|
||||||
*/
|
*/
|
||||||
private BigDecimal otherAmount=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);
|
||||||
@ -56,4 +68,10 @@ public class UserContractAmountVo {
|
|||||||
public void addOtherAmount(BigDecimal amount) {
|
public void addOtherAmount(BigDecimal amount) {
|
||||||
otherAmount=otherAmount.add(amount);
|
otherAmount=otherAmount.add(amount);
|
||||||
}
|
}
|
||||||
|
public void addJieShaoAmount(BigDecimal amount) {
|
||||||
|
jieShaoAmount = jieShaoAmount.add(amount);
|
||||||
|
}
|
||||||
|
public void addJieShaoContractNum() {
|
||||||
|
jieShaoContractNum++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -45,7 +45,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> 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);
|
||||||
|
|
||||||
|
|
||||||
//首页查询各个渠道成交的合同
|
//首页查询各个渠道成交的合同
|
||||||
|
@ -14,7 +14,9 @@ public interface HomeService {
|
|||||||
MakeAmountVo selectMakeAmount(Integer type);
|
MakeAmountVo selectMakeAmount(Integer type);
|
||||||
|
|
||||||
ReturnMoneyInfoVo returnMoney(Integer type);
|
ReturnMoneyInfoVo returnMoney(Integer type);
|
||||||
|
Object getUserContractSourceAmountsByDeptId(Integer type,Long deptId);
|
||||||
List getUserContractAmountsByDeptId(Integer type, Long deptId);
|
List getUserContractAmountsByDeptId(Integer type, Long deptId);
|
||||||
|
Object getUserContractAndPayInfo(Integer type);
|
||||||
/**
|
/**
|
||||||
* 首页大盘数据:各渠道成交
|
* 首页大盘数据:各渠道成交
|
||||||
* @param type
|
* @param type
|
||||||
|
@ -211,8 +211,81 @@ public class HomeServiceImpl implements HomeService {
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String contractSource="转介绍";
|
||||||
/**
|
/**
|
||||||
* 获取部门下各员工的合同总金额
|
* 按人员成交【转介绍】列表,根据部门获取
|
||||||
|
* @param type
|
||||||
|
* @param deptId
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public Object getUserContractSourceAmountsByDeptId(Integer type,Long deptId){
|
||||||
|
Map<String, Object> mapParam = this.getDate(type);
|
||||||
|
LocalDate startDate = (LocalDate)mapParam.get("startDate");
|
||||||
|
LocalDate endDate = (LocalDate)mapParam.get("endDate");
|
||||||
|
String date = (String)mapParam.get("date");
|
||||||
|
|
||||||
|
Map<String,Object> queryParam=new HashMap<>();
|
||||||
|
queryParam.put("startDate",startDate);
|
||||||
|
queryParam.put("endDate",endDate);
|
||||||
|
queryParam.put("contractStatus",ContractStatusEnum.INIT.getCode());
|
||||||
|
queryParam.put("isCancel",CommonStatusEnum.SUCCESS.getCode());
|
||||||
|
queryParam.put("deptId",deptId);
|
||||||
|
|
||||||
|
List<UserContractAmountInfo> list=psContractInfoMapper.getUserContractSourceAmountsByDeptId(queryParam);
|
||||||
|
Map<Long,UserContractAmountVo> res=new HashMap<>();
|
||||||
|
//记录合同编码,防止重复
|
||||||
|
Map<String,String> repeatContractCode=new HashMap<>();
|
||||||
|
for(UserContractAmountInfo obj:list){
|
||||||
|
UserContractAmountVo vo=res.get(obj.getUserId());
|
||||||
|
if(vo==null){
|
||||||
|
vo=new UserContractAmountVo();
|
||||||
|
vo.setUserId(obj.getUserId());
|
||||||
|
vo.setNickName(obj.getNickName());
|
||||||
|
vo.setDateStr(date);
|
||||||
|
res.put(obj.getUserId(),vo);
|
||||||
|
}
|
||||||
|
if(repeatContractCode.get(obj.getContractCode())==null){
|
||||||
|
repeatContractCode.put(obj.getContractCode(),obj.getContractCode());
|
||||||
|
vo.addSumAmount(obj.getContractAmount());
|
||||||
|
}
|
||||||
|
//判断是否为转介绍合同
|
||||||
|
if(contractSource.equals(obj.getCustomSource())){
|
||||||
|
vo.addJieShaoAmount(obj.getContractAmount());
|
||||||
|
vo.addJieShaoContractNum();
|
||||||
|
}else {
|
||||||
|
vo.addOtherAmount(obj.getContractAmount());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//构建表格第一行数据
|
||||||
|
UserContractAmountVo title= new UserContractAmountVo();
|
||||||
|
title.setNickName("总计");
|
||||||
|
title.setDateStr(date);
|
||||||
|
title.setOtherAmount(null);
|
||||||
|
title.setSoftwareDevAmount(null);
|
||||||
|
title.setTuoGuanAmount(null);
|
||||||
|
title.setXuFeiAmount(null);
|
||||||
|
|
||||||
|
//按总金额降序处理
|
||||||
|
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())) {
|
||||||
|
v.setJieShaoPer(v.getJieShaoAmount().multiply(new BigDecimal("100.0")).divide(v.getSumAmount(), 2, RoundingMode.HALF_UP).toPlainString() + "%");
|
||||||
|
}else {
|
||||||
|
v.setJieShaoPer("0.00%");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
listData.add(0,title);
|
||||||
|
return listData;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 按人员成交数据列表,根据部门获取
|
||||||
* @param type 日期过滤规则
|
* @param type 日期过滤规则
|
||||||
* @param deptId 部门id
|
* @param deptId 部门id
|
||||||
* @return
|
* @return
|
||||||
@ -287,13 +360,60 @@ public class HomeServiceImpl implements HomeService {
|
|||||||
}
|
}
|
||||||
//计算金额占比
|
//计算金额占比
|
||||||
for (UserContractAmountVo v:listData) {
|
for (UserContractAmountVo v:listData) {
|
||||||
|
if(!v.getSumAmount().equals(BigDecimal.ZERO)) {
|
||||||
v.setAmountPer(v.getSumAmount().multiply(new BigDecimal("100.0")).divide(title.getSumAmount(), 2, RoundingMode.HALF_UP).toPlainString() + "%");
|
v.setAmountPer(v.getSumAmount().multiply(new BigDecimal("100.0")).divide(title.getSumAmount(), 2, RoundingMode.HALF_UP).toPlainString() + "%");
|
||||||
|
}else {
|
||||||
|
v.setAmountPer("0.00%");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
listData.add(0,title);
|
listData.add(0,title);
|
||||||
return listData;
|
return listData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按人员成交数据饼图,所有部门人员
|
||||||
|
* @param type
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public Object getUserContractAndPayInfo(Integer type){
|
||||||
|
Map<String, Object> mapParam = this.getDate(type);
|
||||||
|
LocalDate startDate = (LocalDate)mapParam.get("startDate");
|
||||||
|
LocalDate endDate = (LocalDate)mapParam.get("endDate");
|
||||||
|
String date = (String)mapParam.get("date");
|
||||||
|
|
||||||
|
Map<String,Object> queryParam=new HashMap<>();
|
||||||
|
queryParam.put("startDate",startDate);
|
||||||
|
queryParam.put("endDate",endDate);
|
||||||
|
queryParam.put("contractStatus",ContractStatusEnum.INIT.getCode());
|
||||||
|
queryParam.put("isCancel",CommonStatusEnum.SUCCESS.getCode());
|
||||||
|
queryParam.put("payStatus",PayStatusEnum.SUCCESS.getCode());
|
||||||
|
|
||||||
|
List<UserContractAmountInfo> list=psContractInfoMapper.getUserContractAndPayInfo(queryParam);
|
||||||
|
Map<Long,UserAmountInfoVo> resMap=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.setNickName(obj.getNickName());
|
||||||
|
vo.setDateStr(date);
|
||||||
|
resMap.put(userId, vo);
|
||||||
|
}
|
||||||
|
//累计合同数量
|
||||||
|
if(obj.getContractCode()!=null&&obj.getContractCode().length()>0){
|
||||||
|
vo.addContractNum();
|
||||||
|
}
|
||||||
|
vo.addSumAmount(obj.getContractAmount());
|
||||||
|
vo.addPayedSumAmount(obj.getPayedMoney());
|
||||||
|
}
|
||||||
|
//计算未付款金额
|
||||||
|
resMap.values().forEach(v->{
|
||||||
|
v.setUnPaySumAmount(v.getSumAmount().subtract(v.getPayedSumAmount()));
|
||||||
|
});
|
||||||
|
return resMap.values();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -86,6 +86,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
info.is_cancel != #{queryParam.isCancel}
|
info.is_cancel != #{queryParam.isCancel}
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<!-- 按人员成交数据列表 -->
|
||||||
<select id="getUserContractTypeAmountsByDeptId" resultType="com.pusong.business.domain.vo.home.UserContractAmountInfo">
|
<select id="getUserContractTypeAmountsByDeptId" resultType="com.pusong.business.domain.vo.home.UserContractAmountInfo">
|
||||||
SELECT
|
SELECT
|
||||||
u.user_id as userId,
|
u.user_id as userId,
|
||||||
@ -111,6 +112,84 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
WHERE u.dept_id=#{queryParam.deptId}
|
WHERE u.dept_id=#{queryParam.deptId}
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<!-- 按人员成交数据统计饼图 -->
|
||||||
|
<select id="getUserContractAndPayInfo" resultType="com.pusong.business.domain.vo.home.UserContractAmountInfo">
|
||||||
|
SELECT
|
||||||
|
u.user_id as userId,
|
||||||
|
u.nick_name as nickName,
|
||||||
|
info.contract_code as contractCode,
|
||||||
|
info.contract_amount as contractAmount,
|
||||||
|
pay.money as payedMoney
|
||||||
|
FROM sys_user u
|
||||||
|
LEFT JOIN ps_contract_info info on
|
||||||
|
u.user_id=info.custom_manager
|
||||||
|
<if test="queryParam.startDate != null">
|
||||||
|
and info.apply_date >= #{queryParam.startDate}
|
||||||
|
</if>
|
||||||
|
<if test="queryParam.endDate != null">
|
||||||
|
and info.apply_date < #{queryParam.endDate}
|
||||||
|
</if>
|
||||||
|
and info.contract_status != #{queryParam.contractStatus}
|
||||||
|
and info.is_cancel != #{queryParam.isCancel}
|
||||||
|
|
||||||
|
LEFT JOIN ps_contract_pay pay on
|
||||||
|
info.contract_code=pay.contract_code
|
||||||
|
and pay.pay_status=#{queryParam.payStatus}
|
||||||
|
and pay.del_flag=0
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!-- 按人员成交数据【转介绍】 -->
|
||||||
|
<select id="getUserContractSourceAmountsByDeptId" resultType="com.pusong.business.domain.vo.home.UserContractAmountInfo">
|
||||||
|
SELECT
|
||||||
|
u.user_id as userId,
|
||||||
|
u.nick_name as nickName,
|
||||||
|
IFNULL(info.contract_amount,0) as contractAmount,
|
||||||
|
info.is_due as isDue,
|
||||||
|
info.contract_code as contractCode,
|
||||||
|
cus.custom_source as customSource
|
||||||
|
FROM sys_user u
|
||||||
|
LEFT JOIN ps_contract_info info on
|
||||||
|
u.user_id=info.custom_manager
|
||||||
|
and info.contract_status != #{queryParam.contractStatus}
|
||||||
|
and info.is_cancel != #{queryParam.isCancel}
|
||||||
|
|
||||||
|
<if test="queryParam.startDate != null">
|
||||||
|
and info.apply_date >= #{queryParam.startDate}
|
||||||
|
</if>
|
||||||
|
<if test="queryParam.endDate != null">
|
||||||
|
and info.apply_date < #{queryParam.endDate}
|
||||||
|
</if>
|
||||||
|
|
||||||
|
LEFT JOIN ps_custom_info cus on info.custom_id=cus.id
|
||||||
|
WHERE u.dept_id=#{queryParam.deptId}
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<!-- 按人员成交【转介绍】数据统计饼图 -->
|
||||||
|
<select id="getJieShaoContractAndPayInfo" resultType="com.pusong.business.domain.vo.home.UserContractAmountInfo">
|
||||||
|
SELECT
|
||||||
|
u.user_id as userId,
|
||||||
|
u.nick_name as nickName,
|
||||||
|
info.contract_code as contractCode,
|
||||||
|
info.contract_amount as contractAmount,
|
||||||
|
pay.money as payedMoney
|
||||||
|
FROM sys_user u
|
||||||
|
LEFT JOIN ps_contract_info info on
|
||||||
|
u.user_id=info.custom_manager
|
||||||
|
<if test="queryParam.startDate != null">
|
||||||
|
and info.apply_date >= #{queryParam.startDate}
|
||||||
|
</if>
|
||||||
|
<if test="queryParam.endDate != null">
|
||||||
|
and info.apply_date < #{queryParam.endDate}
|
||||||
|
</if>
|
||||||
|
and info.contract_status != #{queryParam.contractStatus}
|
||||||
|
and info.is_cancel != #{queryParam.isCancel}
|
||||||
|
|
||||||
|
LEFT JOIN ps_contract_pay pay on
|
||||||
|
info.contract_code=pay.contract_code
|
||||||
|
and pay.pay_status=#{queryParam.payStatus}
|
||||||
|
and pay.del_flag=0
|
||||||
|
</select>
|
||||||
|
|
||||||
|
|
||||||
<sql id="channel">
|
<sql id="channel">
|
||||||
select
|
select
|
||||||
|
Loading…
Reference in New Issue
Block a user