人员合同数据饼图接口开发

人员成交数据转介绍接口开发
This commit is contained in:
LIUFL 2024-09-13 10:09:30 +08:00
parent fd3f2d6654
commit c146cf8d6a
8 changed files with 300 additions and 3 deletions

View File

@ -63,7 +63,7 @@ public class HomeController extends BaseController {
}
/**
* 首页大盘数据人员合同金额统计
* 首页大盘数据人员成交数据列表
* @param type 1本月 2上月 3本季度 4本年 5所有
* @return
*/
@ -72,6 +72,27 @@ public class HomeController extends BaseController {
public R<List> 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("/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所有

View File

@ -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);
}
}

View File

@ -26,8 +26,16 @@ public class UserContractAmountInfo {
* 合同类型
*/
private String businessType;
/**
* 客户来源
*/
private String customSource;
/**
* 合同价格
*/
private BigDecimal contractAmount;
/**
* 已付款金额
*/
private BigDecimal payedMoney;
}

View File

@ -20,6 +20,14 @@ public class UserContractAmountVo {
* 与其他人合同金额的占比
*/
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 jieShaoAmount=new BigDecimal(0);
public void addSumAmount(BigDecimal amount){
sumAmount=sumAmount.add(amount);
@ -56,4 +68,10 @@ public class UserContractAmountVo {
public void addOtherAmount(BigDecimal amount) {
otherAmount=otherAmount.add(amount);
}
public void addJieShaoAmount(BigDecimal amount) {
jieShaoAmount = jieShaoAmount.add(amount);
}
public void addJieShaoContractNum() {
jieShaoContractNum++;
}
}

View File

@ -45,7 +45,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> getUserContractTypeAmountsByDeptId(@Param("queryParam") Map<String, Object> queryParam);
List<UserContractAmountInfo> getUserContractAndPayInfo(@Param("queryParam") Map<String, Object> queryParam);
//首页查询各个渠道成交的合同

View File

@ -14,7 +14,9 @@ public interface HomeService {
MakeAmountVo selectMakeAmount(Integer type);
ReturnMoneyInfoVo returnMoney(Integer type);
Object getUserContractSourceAmountsByDeptId(Integer type,Long deptId);
List getUserContractAmountsByDeptId(Integer type, Long deptId);
Object getUserContractAndPayInfo(Integer type);
/**
* 首页大盘数据各渠道成交
* @param type

View File

@ -211,8 +211,81 @@ public class HomeServiceImpl implements HomeService {
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 deptId 部门id
* @return
@ -287,13 +360,60 @@ public class HomeServiceImpl implements HomeService {
}
//计算金额占比
for (UserContractAmountVo v:listData) {
v.setAmountPer(v.getSumAmount().multiply(new BigDecimal("100.0")).divide(title.getSumAmount(),2, RoundingMode.HALF_UP).toPlainString()+"%");
if(!v.getSumAmount().equals(BigDecimal.ZERO)) {
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);
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();
}
/**

View File

@ -86,6 +86,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
info.is_cancel != #{queryParam.isCancel}
</select>
<!-- 按人员成交数据列表 -->
<select id="getUserContractTypeAmountsByDeptId" resultType="com.pusong.business.domain.vo.home.UserContractAmountInfo">
SELECT
u.user_id as userId,
@ -111,6 +112,84 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
WHERE u.dept_id=#{queryParam.deptId}
</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 &lt; #{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 &lt; #{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 &lt; #{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">
select